在.NET领域中是否有类似于Twisted(Python)或EventMachine(Ruby)的东西?
我是否需要这种抽象?我正在监听一个单一的IO设备,它将向我发送三到四个连接的模拟传感器的事件。仅使用循环的会有什么风险?我不能错过任何事件,但IP堆栈会为我处理消息队列吗?所有这些是否取决于线程在接收消息后尝试执行多少工作?
我在抽象中寻找的是将线程和同步的复杂性从问题中移除。
在.NET领域中是否有类似于Twisted(Python)或EventMachine(Ruby)的东西?
我是否需要这种抽象?我正在监听一个单一的IO设备,它将向我发送三到四个连接的模拟传感器的事件。仅使用循环的会有什么风险?我不能错过任何事件,但IP堆栈会为我处理消息队列吗?所有这些是否取决于线程在接收消息后尝试执行多少工作?
我在抽象中寻找的是将线程和同步的复杂性从问题中移除。
我认为你把它想复杂了。只需要打开一个UDP套接字,并在其上设置异步回调。对于每个传入的数据包,将其放入队列中,并再次设置回调即可。就是这样。
在排队和出队时,请确保在队列上设置锁。
就是这么简单,性能也会很好。
R
听起来你正在寻找可靠的多播 - 你可以尝试 RMF,它将通过从传入消息队列中使用异步回调来实现可靠性和消息传递。IBM也有WebSphere,其中包含一个UDP组件。EmCaster也是一个选择 - 不过开发似乎在2008年就停止了。
如果你不打算将这些数据包(或事件)传输到其他机器上,你可能只需要使用一些简单的东西,比如内存映射文件或其他形式的IPC。