2009-07-03 15 views
7

está transmitiendo una opción viable? ¿habrá una diferencia de rendimiento en el servidor dependiendo de cuál elijo? es uno mejor que el otro para este caso?sondeo largo vs transmisión por aproximadamente 1 actualización/segundo

Estoy trabajando en una aplicación GWT con Tomcat ejecutándose en el extremo del servidor. Para entender mis necesidades, imagine actualizar los precios de las acciones de varias acciones al mismo tiempo.

Respuesta

6

¿Desea que el proceso sea impulsado por el cliente o por el servidor? En otras palabras, ¿desea enviar datos nuevos a los clientes tan pronto como estén disponibles, o preferiría que los clientes soliciten nuevos datos siempre que lo consideren oportuno, incluso si eso no fuera una vez por segundo? ¿Cuál es la probabilidad de que el cliente pueda quedarse esperando una respuesta? Aunque espera que los eventos ocurran una vez por segundo, ¿cuánto tiempo transcurre entre una solicitud de un cliente y la devolución del servidor? Si es más de un segundo, espero que te inclines por llevar los eventos a los clientes, aunque al revés, esperaría que las encuestas estén bien. Si la respuesta lleva más tiempo que el intervalo, esencialmente estás transmitiendo de todos modos, ya que hay un nuevo evento listo para cuando el cliente recibe el último, por lo que el cliente podría sondear continuamente y recibir siempre eventos, en este caso, transmisión los datos en realidad serían más livianos, ya que está eliminando la sobrecarga de conexión/negociación del proceso.

Sospecho que la carga del servidor es mayor para una suscripción basada en el cliente (extracción), en lugar de una configuración de transmisión, ya que el cliente tendría que volver a negociar la conexión cada vez, en lugar de dejar una conexión abierta. pero cada conexión abierta en un modelo de transmisión también requeriría recursos del servidor. Depende de cuál sea el equilibrio entre cuán agresivo es su proceso de negociación y cuánta memoria/procesamiento se requiere para cada conexión abierta. Aunque no soy un experto, entonces puede haber otros factores.

ACTUALIZACIÓN: This guy habla de las ventajas y desventajas entre la larga encuesta y la transmisión, y parece decir que con HTTP/1.1, el proceso de renegociación de conexión es trivial, por lo que no es un problema.

+0

Oye, rwmnau, el enlace que proporcionaste es esclarecedor. Para responder a sus preguntas, quisiera enviar datos a los usuarios tan pronto como estén disponibles. – jcee14

+1

Si desea enviar datos a los usuarios tan pronto como sea posible, entonces creo que la opción debe ser la transmisión, ya que mantendrá una conexión basada en la inserción. Con una configuración de extracción, esperas que los clientes pregunten, pero con push, tendrán los datos tan pronto como se los entregues. ¡Déjame saber qué terminas eligiendo y por qué! – SqlRyan

2

Sin duda, si busca datos push, la transmisión parecería proporcionar un mejor rendimiento, si su servidor puede manejar la cantidad esperada de conexiones continuas. Pero hay otro problema que no aborda: ¿Es usted de Internet o intranet? Se ha informado que la transmisión tiene algunos problemas entre los proxies, tanto como cabría esperar. Por lo tanto, para una solución de propósito general, es probable que le sirva mejor una encuesta larga: para una intranet, donde comprenda la infraestructura de red, es muy probable que la transmisión sea una solución más simple y de mejor rendimiento para usted.

1

La transmisión será más rápida porque los datos solo cruzan el cable en una dirección. Con el sondeo, la latencia es al menos dos veces.

El sondeo es más resistente a las interrupciones de la red ya que no depende de que la conexión se mantenga abierta.

Me gustaría ir a votar solo por la solidez.

+0

Me gustaría aclarar que mi pregunta es sobre encuestas largas y no sobre encuestas tradicionales. Además, NIO debe ser un hecho. – jcee14

+0

Tiene razón, NIO rompe el hilo por restricción de conexión, aliviando el requisito de hilo. –

1

Para precios de acciones en vivo, mantendría absolutamente abierta la conexión y garantizaría la alerta/reconexión del usuario al desconectarse.

2

El StreamHub GWT Comet Adapter se diseñó exactamente para este escenario de cotizaciones de acciones en tiempo real. Ejemplo aquí: GWT Streaming Stock Quotes. Actualiza los precios de las acciones de varias acciones al mismo tiempo. Creo que la implementación debajo es Comet, que esencialmente se transmite en HTTP.

Editar: Utiliza una técnica diferente para cada navegador.Para citar el sitio web:

Hay varias técnicas diferentes subyacentes utilizados para implementar el cometa incluyendo iFrame oculto, XMLHttpRequest/script largo de sondeo, y plugins incrustados como Flash. La introducción de HTML 5 WebSockets en futuros navegadores proporcionará un mecanismo alternativo para HTTP Transmisión por secuencias. StreamHub utiliza un enfoque de "mejor ajuste" utilizando la técnica más confiable y confiable para cada navegador .

4

Realmente no importa. La sobrecarga de renegociación de la conexión es tan delgada con HTTP1.1, que no notará ninguna diferencia de rendimiento significativa de una manera u otra.

Los beneficios de largo de votación son la compatibilidad y fiabilidad - no hay problemas con los proxies, puertos, se desconecta de detección, etc.

Los beneficios de la transmisión de la "verdadera" potencialmente se reduciría encima, pero como ya se ha mencionado, este el beneficio es mucho, mucho menos de lo que se supone que es.

Personalmente, considero que un servidor de cometas bien diseñado es la mejor solución para un gran número de actualizaciones y/o push de servidor.

Cuestiones relacionadas