¿WCF o sockets para la comunicación en un entorno en tiempo real?

Tengo un escenario en el que necesito enviar una serie de datos a 2 clientes.

Los datos incluyen XML serializado que contendrá comandos a los que el otro cliente deberá reaccionar.

También tendré que enviar imágenes a través del cable, ya que necesito proporcionar una función de chat en forma de chat de video / audio.

Me gustaría un solo medio de comunicación para ambos, ya que la cantidad de mensajes / comandos puede ser unos pocos.

WCF o enchufes?

preguntado el 08 de enero de 11 a las 20:01

3 Respuestas

WCF es una API para crear aplicaciones orientadas a servicios. No creo que el chat de video / voz sea ese tipo de aplicación.

En primer lugar, ¿qué características de transporte necesita para dicha aplicación? Mi conocimiento de la transmisión de voz / video es muy pobre pero espero:

  • Comunicación dúplex donde el cliente se conecta al servidor de chat, envía sus datos de voz / video y recibe datos de voz / video de otro cliente.
  • Streaming: la cantidad de datos puede ser bastante grande, por lo que sería bueno trabajar con datos cuando empiece a leerlos. Además, se supone que algunos algoritmos de codificación se utilizan con la transmisión.
  • Calidad de servicio: control del ritmo de transmisión sostenible. (Si desea realizar una conferencia de video chat, también necesita la coordinación de múltiples transmisiones)

Entonces, simplemente describiendo estas tres expectativas, ya veo el problema. Enlace Net.Tcp incorporado de WCF no permite la comunicación dúplex y el streaming juntos. También tenga en cuenta que el rendimiento de la comunicación Net.tcp a través de WCF es mucho peor que la comunicación por socket simple. Es porque WCF simplifica muchas cosas, pero esas simplificaciones y generalizaciones ralentizan el procesamiento.

También basado en algoritmo seleccionado este podría ser un problema.

Aquí puede encontrar una descripción del chat de video en Silverlight 4. Silverlight permite el enlace WCF y net.tcp pero la comunicación aún se desarrolla en sockets.

Aquí Puede encontrar una descripción de los protocolos ampliamente utilizados para voz sobre IP: RTP para transmisión de datos y RTCP para coordinación y QoS. Estos protocolos también se utilizan para la transmisión de video. Al buscar en Google encontré implementación para .NET (no sé qué tan buena es la implementación, acabo de usar google ...)

contestado el 23 de mayo de 17 a las 15:05

Estas son algunas de las cosas en las que pensaría:

WCF puede resultar útil si prevé varios tipos diferentes de clientes que se conectarán a su servidor. Tal vez en el futuro quieras dejar que otras personas escriban clientes, más o menos independientes de ti. Por otro lado, si se trata de un sistema cerrado, es posible que prefiera escribir su propio código de sockets.

WCF le brinda una abstracción de nivel superior, por lo que presumiblemente puede escribir su sistema más rápidamente. En particular, cosas como la codificación XML y la administración de sesiones no son realmente parte del dominio de su aplicación y, por lo tanto, no querrá dedicar mucho tiempo a trabajar en ellas. Pero una mayor abstracción generalmente implica un costo de rendimiento, porque la capa de abstracción es más de propósito general que lo que necesita cualquier aplicación. Con sockets simples, puede adaptar su sistema a sus propias necesidades, y eso podría permitir un mayor rendimiento (a costa de un desarrollo más complicado y corrección de errores).

Es posible que desee enviar sus datos / comandos y video en secuencias separadas. Presumiblemente, los datos / comandos deben enviarse a través de un transporte confiable, pero el video puede sufrir alguna pérdida. O tal vez el video debería enviarse con un QOS alto mientras que los datos / comandos pueden sufrir latencia. En realidad, nunca usé QOS y, por lo tanto, no sé cuáles son los problemas aquí, pero podría afectar su decisión sobre WCF (ya sea favorable o negativamente).

Puede alojar su servidor en su propio proceso o en IIS. Si lo aloja usted mismo, podrá hacer las cosas a su manera. Creo que WCF e IIS son buenos amigos, por lo que si estás pensando en IIS, WCF podría hacerte la vida mucho más fácil. Si elige IIS (o cualquier servidor web establecido) sobre su propio host, puede aprovechar su infraestructura: escalabilidad, confiabilidad, cifrado, etc. La desventaja es que puede quedar bloqueado en ese servidor, pero eso podría no ser un problema en la práctica.

Dependiendo de su entorno, es posible que pueda combinar y combinar las diversas tecnologías y características. Por ejemplo, tenemos un sistema que suena vagamente parecido al tuyo y optamos por: sockets planos en el cliente; sockets planos en el servidor pero con una opción para alojar el servidor en Apache; una biblioteca XML personalizada que hace exactamente lo que necesitamos; OpenSSL integrado; COM en el núcleo del sistema pero con dependencias de .NET. En particular, usamos SOAP en nuestro primer prototipo porque su mensajería y RPC eran una combinación perfecta para nuestro diseño, pero descubrimos que agregaba demasiada complejidad y lo reemplazó con nuestro propio protocolo.

Si tiene tiempo, le sugiero que cree un prototipo rápido en WCF y vea lo que piensa. Espero que funcione, pero no tengas miedo de deshacerte de él si no es así. El principio fundamental es brindar el máximo valor comercial a sus clientes de la manera más eficiente posible, y eso generalmente significa que debe dedicar sus esfuerzos al dominio de su aplicación en lugar de a la infraestructura. Pero al mismo tiempo, no ignore los principios secundarios como el rendimiento, la confiabilidad, la escalabilidad, el mantenimiento, la extensibilidad, etc.

Respondido el 09 de enero de 11 a las 01:01

WCF or Enchufes ??? Estas no son alternativas: WCF incluye NetTcpBinding y NetPeerTcpBinding, para la comunicación TCP / IP.

Si sus clientes son ambos Windows, debe usar WCF.

Respondido el 08 de enero de 11 a las 23:01

La pregunta de Pieter se basa en mi comentario a su pregunta anterior. - Ladislav Mrnka

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.