TCP数据发送丢包的有关问题
TCP数据发送丢包的问题
在程序中,采用了TCP作为通讯方式。
程序处理过程中,主要由服务器向客户端推送消息。
因此采取了如下的设计方式:
1. 客户端发起连接,服务器接收连接,并将其放入连接列表中;
2. 服务器向连接列表中的所有连接发送数据;
3. 客户端可能向服务器发送数据,但是发送数据的概率非常小;
在这种模式下,主要是服务器不停向客户端发送数据,30次/秒 客户端不停接收。
目前发现一个问题,如果服务器和客户端运行在同一台机器上时,从客户端接受来看,基本没有丢失。
但是如果运行在不同的机器上时,发现客户端接收数据丢失率非常高,达到70%左右。
请问这是怎么回事?
谢谢!
------解决方案--------------------
服务端向客户端发送数据,使用已经建立的连接就好了,不要每次发送都重新握手连接
------解决方案--------------------
在同一台机器时,采用的网络的环回接口,不走低层协议,所以比较快,基本是不会丢包的。
但是如果在不同机器,而你的数据量很大时,发送的数据量超过了tcp缓冲区或超过了带宽等,就会丢包
------解决方案--------------------
服务器发送的网卡内存满了,所以会丢
------解决方案--------------------
你发送的时候肯定没有去判断SEND的返回值,做个调整,SEND返回-1时,sleep(1)一下
------解决方案--------------------
用styleman_network轻量级网络引擎或用 styleman_iocp 完成端口引擎. 我资源里有.因为是我写的.
------解决方案--------------------
发现客户端接收数据丢失率非常高
----------------------------
怎么发现的?
TCP不会丢的,你说的是"一直收不到数据"吧?
------解决方案--------------------
是你接收端的处理有问题吧~
------解决方案--------------------
服务器方是阻塞还是非阻塞?send返回值判断了没?
在程序中,采用了TCP作为通讯方式。
程序处理过程中,主要由服务器向客户端推送消息。
因此采取了如下的设计方式:
1. 客户端发起连接,服务器接收连接,并将其放入连接列表中;
2. 服务器向连接列表中的所有连接发送数据;
3. 客户端可能向服务器发送数据,但是发送数据的概率非常小;
在这种模式下,主要是服务器不停向客户端发送数据,30次/秒 客户端不停接收。
目前发现一个问题,如果服务器和客户端运行在同一台机器上时,从客户端接受来看,基本没有丢失。
但是如果运行在不同的机器上时,发现客户端接收数据丢失率非常高,达到70%左右。
请问这是怎么回事?
谢谢!
------解决方案--------------------
服务端向客户端发送数据,使用已经建立的连接就好了,不要每次发送都重新握手连接
------解决方案--------------------
在同一台机器时,采用的网络的环回接口,不走低层协议,所以比较快,基本是不会丢包的。
但是如果在不同机器,而你的数据量很大时,发送的数据量超过了tcp缓冲区或超过了带宽等,就会丢包
------解决方案--------------------
服务器发送的网卡内存满了,所以会丢
------解决方案--------------------
你发送的时候肯定没有去判断SEND的返回值,做个调整,SEND返回-1时,sleep(1)一下
------解决方案--------------------
用styleman_network轻量级网络引擎或用 styleman_iocp 完成端口引擎. 我资源里有.因为是我写的.
------解决方案--------------------
发现客户端接收数据丢失率非常高
----------------------------
怎么发现的?
TCP不会丢的,你说的是"一直收不到数据"吧?
------解决方案--------------------
是你接收端的处理有问题吧~
------解决方案--------------------
服务器方是阻塞还是非阻塞?send返回值判断了没?