socket编程,udp打洞,如何避免多线程接收数据(特定线程接收特定数据)
socket编程,udp打洞,如何处理多线程接收数据(特定线程接收特定数据)
如题,使用UDP打洞,需要使用心跳包来保持NAT映射。如果使用多线程的话,比如接收工作数据一个线程,心跳一个线程,那么双线程如何能区分地接受数据。比如,心跳想接收心跳包,却收到了工作数据包,或者工作线程收到了心跳包导致心跳线程收不到心跳。怎么办?
求解
------解决方案--------------------
现在网络框架设计都是基于单线程的了,然后通过消息队列的方式进行任务调度。可参考chrome源码
------解决方案--------------------
没有耗时的操作的话,没必要开2个线程,如果有,可以用一个主线程全部接受下来,再根据类型分配到指定线程。
如题,使用UDP打洞,需要使用心跳包来保持NAT映射。如果使用多线程的话,比如接收工作数据一个线程,心跳一个线程,那么双线程如何能区分地接受数据。比如,心跳想接收心跳包,却收到了工作数据包,或者工作线程收到了心跳包导致心跳线程收不到心跳。怎么办?
求解
------解决方案--------------------
现在网络框架设计都是基于单线程的了,然后通过消息队列的方式进行任务调度。可参考chrome源码
------解决方案--------------------
没有耗时的操作的话,没必要开2个线程,如果有,可以用一个主线程全部接受下来,再根据类型分配到指定线程。