如题,使用UDP打洞,需要使用心跳包来保持NAT映射。如果使用多线程的话,比如接收工作数据一个线程,心跳一个线程,那么双线程如何能区分地接受数据。比如,心跳想接收心跳包,却收到了工作数据包,或者工作线程收到了心跳包导致心跳线程收不到心跳。怎么办?
求解

解决方案 »

  1.   

    这个问题没人回答,我自己回答。昨晚想了下,觉得我自己把问题搞复杂了,不需要工作线程和心跳线程并行运行。心跳是为了保持NAT的映射表的,传输数据的时候不需要发送心跳,而等无数据传输,空闲的时候,把心跳开上就行了。可以是一个串行的关系。
      

  2.   

    现在网络框架设计都是基于单线程的了,然后通过消息队列的方式进行任务调度。可参考chrome源码
      

  3.   

    现在网络框架设计都是基于单线程的了,然后通过消息队列的方式进行任务调度。可参考chrome源码
    学习下,谢谢
      

  4.   

    恭喜你想通了。另外你的UDP包就没有一个包头吗?这不是TCP,不能把大数据一股脑传过去,要分包,加头,根据包头判断是什么类型的包,有没有丢失等等
      

  5.   

    是的,UDP需要分包,加包头,接收方复原数据,我控制每个包在1400字节,另外还有丢失重传等,力争保持数据完整可靠传输。