问题描述
本人初学者用异步的方法建了个UDP接收服务器经过压力测试客户端发送10W条数据(10秒左右全部发出)使用异步丢包达到20-30%应该是启动异步的时候有一段真空期没有有效的监听在运行导致数据接收失败请问这个问题如何解决同样的服务器端使用同步接收正常
解决方案
解决方案二:
自己做服务器,工作量太大,可以试一下来自英国的开源的networkcomms2.31通信框架下载地址:http://pan.baidu.com/s/1nt84xNr
解决方案三:
引用楼主qq_25949727的回复:
本人初学者用异步的方法建了个UDP接收服务器经过压力测试客户端发送10W条数据(10秒左右全部发出)使用异步丢包达到20-30%应该是启动异步的时候有一段真空期没有有效的监听在运行导致数据接收失败请问这个问题如何解决同样的服务器端使用同步接收正常
什么叫“有一段真空期”呢?如果你需要等到服务器准备好才开始发送,那么就先让客户端接收服务器发来的消息,然后再开始发送10w消息呗。另外,udp本来就是不可靠的,当你连续发10w消息时,不能保证对方都能收到。在互联上由于各种意想不到的问题,能收到80%也算不错了。
解决方案四:
我说的真空期是启动回调函数以后监听应该是失效了,因为重新启动监听是在回调函数处理完接收工作以后.流程如下步知道我理解的对不服务器异步开始监听----》收到信息----【》回调函数---》处理信息】----》递归监听在回调函数到处理信息期间这个时间监听是不是失效的哦。因为信息密集修改发送函数后大概1秒8W条数据我做了个服务器验证信息就是客户端将发送信息增加前缀验证码---》服务器接收信息---》服务器读取信息前缀---》发送给客户端----》客户端验证信息确定那些信息服务器已经收到-----》失败重发。也不是自己做服务器只是学习。。所谓的10W条只是个测试。。。
解决方案五:
呵呵。。写C#才一个星期。。没什么编程基础还不是太了解异步的工作原理
解决方案六:
引用3楼qq_25949727的回复:
服务器异步开始监听----》收到信息----【》回调函数---》处理信息】----》递归监听在回调函数到处理信息期间这个时间监听是不是失效的哦。因为信息密集修改发送函数后大概1秒8W条数据我做了个服务器验证信息就是客户端将发送信息增加前缀验证码---》服务器接收信息---》服务器读取信息前缀---》发送给客户端----》客户端验证信息确定那些信息服务器已经收到-----》失败重发。
可能是你处理并发多线程程序的“累计”时没有同步,造成了数据被覆盖了。udp本来就是进行“不可靠通讯”的。如果你做“验证-重发”机制,那么你的程序比tcp还慢,就没有必要使用udp了。
解决方案七:
udp的不可靠性问题,在本机、小程序下一般来说测试不出来。当你用千兆网局域网的两台机器测试,在网络比较繁忙的时候(或者路由器收到部分攻击的时候)就能明显测试到开始频繁丢包了。跨几个交换机、几个网络、距离远一些,就更明显。所以udp都使用在“丢包也无所谓”的业务上的。
解决方案八:
谢谢了再研究研究。。。。