.net的多线程网络UDP服务器库

时间:2010-02-11 23:58:47

标签: c# .net sockets udp

.net中是否存在twisted(python)或eventmachine(ruby)等内容?

我甚至需要这种抽象吗?我正在收听一个IO设备,它会向我发送连接到它的三个或四个模拟传感器的事件。简单地使用循环UdpClient会有什么风险?我不能错过任何事件,但ip堆栈会为我处理消息的排队吗?所有这些都取决于线程在收到消息后尝试做多少工作?

我在抽象中寻找的是从问题中删除线程和同步的复杂性。

4 个答案:

答案 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。