客户端接收服务器端数据出现假死现象。
环境描述:
1. 客户端是window程序
2. 服务器端是Linux程序
3. 服务器端程序和客户端程序采用TCP进行通讯
1. 首先,客户端上进行抓包,对其数据包进行分析,发现服务器端发送的数据总是不完全
2. 其次,服务器上进行抓包,发现发送一会儿后,发送端的TCP窗口满了,导致数据溢出,发送的数据都是错误的数据包
3. 从服务器上的数据包分析发现,由于客户端处理速度过慢引起
1. 提高客户端接收数据的速度,接收数据和处理数据进行异步处理。接收数据单独一个线程/进程,将接收到的数据直接进行分发到数据处理目标线程/进程;即,消息泵机制
2. 增加客户端接收数据的缓冲区
3. 增加服务器端发送数据的缓冲区
//接收缓冲区
int nRecvBuf = 2<<20; //设置为2M
setsockopt(s, SOL_SOCKET, SO_RCVBUF, (constchar*)&nRecvBuf, sizeof(int));
//发送缓冲区
int nSendBuf=2<<20; //设置为2M
setsockopt(s, SOL_SOCKET, SO_SNDBUF, (constchar*)&nSendBuf, sizeof(int));
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wh8_2011/article/details/48102509