我目前正在开发一个简单的P2P网络作为练习。网络中的每个节点都会将心跳发送到其他节点的子集,以便能够检测已离开网络的节点。除了心跳数据包之外,当新节点加入/离开网络时,当他们想要查找资源(小文本文件)等时,我会发送数据包。所有数据包都是UDP数据包。处理很多传入数据包的最佳方法
每当我收到一个数据包,我开始一个新的线程来处理特定数据包。然而,我担心的是在一个应用程序生命周期中开始的线程数量增加了很多(尤其是因为心跳)。 (也有我想避免的死锁之类的风险)。
我想到有一个队列或者我把所有的报文,并有一个单独的线程处理所有的数据包一次一个从队列(类似生产者 - 消费者模式)的东西。我希望数据包得到快速处理,因此发送者不会认为数据包丢失。
什么是处理很多不同的传入数据包,而无需启动为他们每个人一个新的线程的最佳方式?我应该用我拥有的东西,生产者消费还是不同的东西?
当然。使用生产者 - 消费者和LinkedList。我能想到的最简单的方法。 – DankMemes
你可以从你自己提到的方式开始,做一些基准,然后尝试最新的东西,比如“Disruptor”(http://lmax-exchange.github.com/disruptor/),然后再做一些基准。 –
它可能有助于量化“许多不同的传入数据包”......相对而言,当现代系统通常可以处理每秒数百到数千个数据包(取决于您的NIC的数量和类型)时,心跳应该不会太多。我怀疑心跳可能会在几十分钟的范围内... – twalberg