2010-02-11 6 views
7

¿Hay algo así como twisted (python) o eventmachine (ruby) en .net land?Biblioteca de servidor UDP de red de subprocesos múltiples para .net

¿Necesito esta abstracción? Estoy escuchando un único dispositivo IO que me enviará eventos para tres o cuatro sensores analógicos conectados a él. ¿Cuáles son los riesgos de simplemente usar un UdpClient en bucle? No puedo perderme ningún evento, ¿pero la pila ip manejará la cola de mensajes para mí? ¿Todo esto depende de cuánto trabajo intenta hacer el hilo una vez que recibo un mensaje?

Lo que estoy buscando en una abstracción es eliminar la complicación de enhebrar y la sincronización del problema.

+0

Revisa http://kayakhttp.com/ –

+0

Eso es casi exactamente lo que necesito, solo que no necesito HTTP, estoy escuchando eventos UDP. Gracias por el enlace, lo siento, no estaba claro. –

Respuesta

5

Creo que lo está haciendo demasiado complicado. Simplemente tiene 1 socket UDP abierto, y establezca una devolución de llamada asincrónica. Por cada paquete entrante póngalo en una cola, y configure la devolución de llamada nuevamente. Eso es.

asegúrese de que al poner en cola y dequeuear, establezca un bloqueo en la cola.

es tan simple como eso y el rendimiento será excelente.

R

0

Recomendaría ICE es un motor de comunicación que te abstraerá del enhebrado y la comunicación (la documentación es bastante exhaustiva).

+0

ICE utiliza una licencia GPLv2, lo que la hace incompatible con la licencia AGPL (que es una licencia copyleft diseñada específicamente para aplicaciones de red). Esto efectivamente paraliza cualquier servidor de red copyleft que desee construir. http://en.wikipedia.org/wiki/Affero_General_Public_License#Compatibility_with_the_GPL – Nuzzolilo

+0

Cierto, no tomé en cuenta el aspecto de la licencia. –

0

El problema es que con Udp automáticamente está asumiendo el riesgo de paquetes perdidos. He leído la documentación de ICE (como sugirió Steve), y es muy exhaustiva. Parece que ICE funcionará para Udp, sin embargo, parece que Tcp es preferido por los desarrolladores. De la documentación de ICE deduzco que no proporciona ningún mecanismo intensivo para garantizar comunicaciones confiables de Udp.

En realidad, es muy fácil configurar un cliente o servidor asíncrono de Udp. Su verdadero trabajo es verificar los paquetes completos y el almacenamiento en búfer. Las implementaciones asincrónicas deberían evitar que administre subprocesos.

0

Suena como que busca multidifusión fiable -Podrías tratar RMF, lo hará la fiabilidad y entregar los mensajes a través de ASYC devoluciones de llamada de la cola de mensajes entrantes. IBM también hace WebSphere que tiene un componente UDP. EmCaster también es una opción; sin embargo, el desarrollo parece haberse detenido en 2008.

Si no va a transmitir estos paquetes (o eventos) a otras máquinas, es posible que desee utilizar algo simple como archivos mapeados en memoria u otras formas de IPC.

Cuestiones relacionadas