TCP粘包处理 参考spserver

TCP粘包出现的原因就不在详细描述了。TCP粘包是在做TCP编程时经常会遇到的问题,网上相关的参考也不少,大都都是一个热心人士编写的,
若仅用于学习就算了,若用真正用于项目还有待考虑。
本文就简述一下如何利用spserver处理粘包问题。SPserver的性能有多好我也不说了。(嘎嘎)
处理思路如下:
1.SP_MultiLineMsgDecoder中的decoder是用于分解包,当然分解的原来是使用‘\n’.我们利用该函数的原来分包。
2.SP_CircleQueue * mQueue; 用于存储分解后的包。
3.SP_Buffer 用于存储收到的报文。
4.那如何读取包呢? spwin32buffer_read( getEvBuffer( session->getInBuffer() ), mFd, -1 ); 在该函数内部,使它使用了itcl判断报文的数量,然后在SP_Buffer分配对应的空间,
分配函数为if (spwin32buffer_expand(buf, howmuch) == -1)
5.需要注意的是解包时,需要将完整的包读至SP_CircleQueue中,调用函数为spwin32buffer_remove。
写完速度测试完全对应 echoServer没有问题。
 

posted on 2015-10-25 18:03  corecible  阅读(297)  评论(0编辑  收藏  举报

导航