我写了一个udp服务器,刚开始运行时还好好的,每个客户端都可以正常的连接上来,但是当服务端运行1~2天以后(或更长一段时间),发现总会有1%左右的客户端无法连上服务器(100台有1台,1000台有10台)。体现在:客户端往服务端发送udp数据,但是服务端就是检测不到。我是用WsaAsyncSelect的方式写的服务端的,不知道有没有人有遇到过这种情况。

解决方案 »

  1.   

    UDP本身就不可靠,中间中转的路由器越多,丢包可能就越多。
      

  2.   

    超时重发机制等等都有做了。我是怕是这个通信模型的缺陷造成的。因为服务端对于每个客户端的处理都是一样的,如果是程序逻辑上的问题,那么应该会有大部份的客户端出现问题,而不是现在的只有一小部分。这实在是很头疼,不知道为什么服务端运行几天后,会收不到一定比例的客户端的数据。 不知道换成Event模型会不会好点,记得以前老外写的一本书上有说过Event模型的性能各方面还是比较好的。有类似经验的兄弟说下,大致会有什么问题呢?也象arong1234说的,要你结合客户端、服务端和网络诸多因素调试的,我现在是有点晕了,呵呵
      

  3.   

    UDP本身没有重发机制,而丢包率会随网络的复杂程度增加而增加。---可增加重发机制另一方面,当服务器过于繁忙,新到的数据超出数据缓存也会发生丢包 --使用IOCP等技术改进模型