问题描述
各位高人。。。关于socket并发的问题,求助。。。环境:假设有A、B两台主机,A上开启多个线程(500),每个线程均与B建立一个socket连接(TCP连接,同步方式,B采用同一个监听端口),然后A上的各个线程分别往B发送socket消息(每个线程发1000次)。B开启一个监听端口,一但Accept消息就丢给一个新开的线程去处理。观察:在A和B上分别输出发送与接收到的消息,发现A可以将所有消息发送出去,但是B并没有接收到所有A发送过来的消息,似乎产生了丢失。没有捕获异常,程序也并没有报错。ps:在异步方式下也试过,仍然出现这种现象。请问这是什么原因造成的呢?应该如何解决?只有这么些分了,全部献出,实在抱歉。。。感谢~
解决方案
解决方案二:
确定是B没有接收到还是接收到了没能创建更多的线程去处理?如果是前者,可能是程序漏洞如果是后者,可在B端创建一个队列,将接收到的消息存入队列中然后保证线程数不超过一定值得情况下不断地从队列中取消息进行处理
解决方案三:
自己多查查代码吧
解决方案四:
检查过代码了,仍然有问题。。。这种同步或者异步模式是可以保证数据全部被接收的么?
解决方案五:
IP协议中头有一个十分重要的参数:TTL,它决定了数据包在网络中转发的生存时间TCP传输是可以保证数据交换的可靠性的,但这是指一方的主机将数据正确的传输到目标机器中,目标机器的协议栈的堆栈是有一定限制的,如果在目标机器中不及时处理接收到的数据,有可能堆栈会溢出!而这种溢出并不是因为TCP协议本身,而是因为系统的IP协议栈的缓冲区溢出造成!我隐约记得计算机网络书上提到过TCP只能算得上是“尽最大限度服务的可靠连接”,一旦发生网络拥塞一样会出现丢包
解决方案六:
我也做过lz的实验,确实是有可能丢失的。我用的是局域网tcp发包。当你的发包线程很多的时候不是所有包接收端都能收到