客户端起了10个线程,每个线程发送10个数据包(自定义的,有头,有长度,有内容,已测试单包发送没问题)服务端接收数据包,结果发现丢包一半以上 - -!尝试在 messageRecevied 方法中不错任何事情(减少处理时间,只是简单 println 语句) 仍然没有 10*10 的结果如果客户端是 100*1 ,一百个线程,每个发一条,丢包更严重如果客户端是 10*5 ,5个线程,每个发10条,结果不丢包...求解释.....

解决方案 »

  1.   

    估计网络环境不好。要想不丢包那就用 TCP
      

  2.   

    线程……Windows下一个线程默认占1M空间……UDP不保证数据完整性
      

  3.   


    因为项目是要存储游戏玩家的聊天记录,基本都是文本信息,数据总量大,但单个数据包小,而且客户端并发度高,用 UDP 会比 TCP 好吧...
      

  4.   

    这是正常现象,主要原因是UDP没有流量控制,也不具有滑动窗口协议,如果发送端发送频率过高,会淹没接收端。接收端缓存不够就会导致丢包,其实数据包压根还没传送到MINA那一层,在操作系统内核层就丢掉了。因此不论你如何优化,精简MINA的处理,只要发送频率过快,还是会有丢包问题,除非在应用层对每个包编号,并自实现超时重发(类似TFTP协议)。
      

  5.   

    可能跟你的 bufferSize 有关,你调整一下 ReadBufferSize、ReceiveBufferSize和SendBufferSize  这些参数 。 如果缓冲区满的话,收到的UDP包会丢弃。