.net中是否存在twisted(python)或eventmachine(ruby)等内容?
我甚至需要这种抽象吗?我正在收听一个IO设备,它会向我发送连接到它的三个或四个模拟传感器的事件。简单地使用循环UdpClient
会有什么风险?我不能错过任何事件,但ip堆栈会为我处理消息的排队吗?所有这些都取决于线程在收到消息后尝试做多少工作?
我在抽象中寻找的是从问题中删除线程和同步的复杂性。
答案 0 :(得分:5)
我认为你太复杂了。 只打开1个UDP套接字,并在其上设置异步回调。对于每个传入的数据包,将其放入队列,并再次设置回调。多数民众赞成。
确保在排队和出列时设置了对队列的锁定。
就这么简单,性能也会很棒。
[R
答案 1 :(得分:0)
我建议ICE它是一个通信引擎,它将抽象线程和通信给你(文档有点详尽)。
答案 2 :(得分:0)
问题是,使用Udp,您会自动承担丢失数据包的风险。我已经阅读了有关ICE的文档(正如史蒂夫建议的那样),并且非常详尽无遗。似乎ICE将适用于Udp,但是,看起来Tcp是开发人员的首选。我从ICE文档中收集到它没有提供任何密集的机制来确保可靠的Udp通信。
实际上很容易设置异步Udp客户端或服务器。你真正的工作是检查完整的数据包和缓冲。异步实现应该阻止您管理线程。
答案 3 :(得分:0)
听起来您正在寻找可靠的多播 - 您可以尝试RMF,它将执行可靠性并使用来自传入消息队列的asyc回调来传递消息。 IBM也从事具有UDP组件的WebSphere。 EmCaster也是一种选择 - 但是发展似乎已经在2008年停止了。
如果您不打算将这些数据包(或事件)传输到其他计算机,您可能只想使用简单的内存映射文件或其他形式的IPC。