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

8

在.NET领域中是否有类似于Twisted(Python)或EventMachine(Ruby)的东西?

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

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


请查看 http://kayakhttp.com/。 - Darrel Miller
这几乎就是我需要的,只是我不需要HTTP,我正在监听UDP事件。谢谢你提供的链接,不过抱歉我表达不够清楚。 - Sam Coles
4个回答

6

我认为你把它想复杂了。只需要打开一个UDP套接字,并在其上设置异步回调。对于每个传入的数据包,将其放入队列中,并再次设置回调即可。就是这样。

在排队和出队时,请确保在队列上设置锁。

就是这么简单,性能也会很好。

R


0
我建议使用ICE,它是一个通信引擎,可以为您抽象出线程和通信(文档有点详尽)。

ICE使用GPLv2许可证,这使其与AGPL许可证不兼容(后者是专门为网络应用程序设计的版权协议)。这有效地瘫痪了任何想要构建的版权网络服务器。http://en.wikipedia.org/wiki/Affero_General_Public_License#Compatibility_with_the_GPL - marknuzz
没错,我没有考虑到许可证方面。 - call me Steve

0
问题在于使用UDP时自动承担了丢包的风险。我已经阅读了ICE(正如Steve建议的那样)的文档,它非常详尽。看起来ICE可以用于UDP,但是开发人员更喜欢使用TCP。从ICE文档中我了解到,它并没有提供任何强大的机制来确保可靠的UDP通信。
实际上,设置异步UDP客户端或服务器非常容易。真正的工作在于检查完整的数据包和缓冲区。异步实现应该可以避免您管理线程的麻烦。

0

听起来你正在寻找可靠的多播 - 你可以尝试 RMF,它将通过从传入消息队列中使用异步回调来实现可靠性和消息传递。IBM也有WebSphere,其中包含一个UDP组件。EmCaster也是一个选择 - 不过开发似乎在2008年就停止了。

如果你不打算将这些数据包(或事件)传输到其他机器上,你可能只需要使用一些简单的东西,比如内存映射文件或其他形式的IPC。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接