2010-08-23 21 views
5

Estoy haciendo una aplicación con variables del lado del servidor que cambian cada segundo. Cada segundo esas nuevas variables deben mostrarse en todos los clientes que tienen abierta la página web.ASP.NET - Comet Envío de mensajes desde el servidor a todos los clientes

Ahora la mayoría de la gente me dijo que fuera con el cometa porque necesito empujar/tirar de los datos de cada segundo, ahora tengo algunas preguntas:

  • lo que sería una solución mejor mirar el ¿De hecho que necesito los nuevos datos CADA SEGUNDO, extrayendo del cliente o empujando con el servidor?

  • También los ID de los artículos que están en el lado del servidor (con la variable que obtuvo) pueden cambiar y cuando el cliente actualiza la página necesita obtener los ID más antiguos (y vivos). Esto significaría que mi jquery/javascript en el lado del cliente debe saber qué identificaciones obtuvo en la página, ¿cuál es la mejor manera de hacerlo?

  • Lo último es que no puedo encontrar una buena (no es costosa) cometa library/api para asp.net (C#). ¿Alguna vez alguien usó una biblioteca de cometas con buenos resultados? Estamos viendo un sitio que debería tener 2000 conexiones de cometa en todo momento.

Respuesta

2

lo que sería una solución mejor mirar el hecho de que necesito los nuevos datos cada segundo, tirando de el cliente o empujar con el servidor?

No creo que no importe mucho, ya que el tiempo entre las solicitudes y el momento en que los nuevos datos estarán disponibles es bastante corto. Me gustaría crear una nueva XMLHttpRequest en el cliente después de que la anterior tuvo éxito. Puede enviar al servidor la última información recibida (si no es demasiado grande) para que pueda comparar esa información con la actual disponible en el servidor y solo enviar algo cuando haya nuevos datos disponibles.

también las identificaciones de elementos que están en el lado servidor (con la variable de que Identificación consiguió) puede cambiar y cuando el cliente actualiza la página que necesita para obtener la más antigua (y la vida) Identificación de. Esto significaría que mi jquery/javascript en el lado del cliente debe saber qué identificaciones obtuvo en la página, ¿cuál es la mejor manera de hacer esto?

No estoy del todo seguro de entender lo que quiere decir, pero si estoy en lo cierto, puede almacenar cada par de nombre/valor en un objeto. Cuando una nueva variable llega al cliente, no sobrescribe los datos existentes; cuando una determinada variable ya está presente, se actualiza con el último valor. Podría verse como:

{ first_variable: 345, 
    second_one: "foo", 
    and_the_third: ["I", "am", "an", "array,", "hooray!"] 
} 

y cuando un nuevo estado de second_one llega, por ejemplo, "bar", el objeto se actualiza a:

{ first_variable: 345, 
    second_one: "bar", 
    and_the_third: ["I", "am", "an", "array,", "hooray!"] 
} 

último es que no puedo encontrar un buen (no es muy caro) biblioteca cometa/api para asp.net (C#). ¿Alguien alguna vez usó una biblioteca de cometas con buenos resultados?

no tengo ninguna experiencia con ASP.NET, pero ¿Necesita tal biblioteca para esto? ¿No puede programar usted mismo el código del lado del servidor que, como dije, deja la conexión abierta y periódicamente (continuamente) compara el estado actual con el estado enviado anterior?


ACTUALIZACIÓN: Para mostrar que no es tan difícil mantener una conexión abierta en el lado del servidor, te voy a mostrar una simulación de votación larga he escrito en PHP:

<?php 
    sleep(5); 
?> 
<b>OK!</b> 

lugar de dejar que el proceso sleep unos segundos, puede probar fácilmente los cambios de estado en un bucle. Y en lugar de enviar un elemento HTML arbitrario, puede enviar los datos de vuelta, p. en la notación JSON. No me puedo imaginar que sería tan difícil hacer esto en ASP.NET/C#.

+0

Encontré algunos buenos tutoriales sobre lo último que mencionas, manteniendo la conexión abierta y recibiendo las solicitudes http. Ahora el problema es que no sé qué tan rápido va a ser si escribo cada parte yo mismo. Voy a intentarlo más tarde hoy de todos modos, pero puede llevar mucho tiempo. También tengo como 4 div estándar que deberían obtener una identificación cuando se carga la página. Después de esto, cada segundo que se actualiza, mira la ID del div y coloca allí el valor correcto. Es muy parecido a las subastas de centavos que ves más ahora. ¡De todas formas, gracias por tu respuesta! Ojalá más gente reaccione. – Julian

+0

@Julian - Todavía no estoy seguro de que te haya entendido correctamente. Manipular el DOM en JavaScript es muy fácil hoy en día. Si es necesario, siempre puede hacer nuevas preguntas, pero ya existen muchas preguntas aquí en SO. Y no asisto a subastas de centavos en nuestro país. ;) –

+0

Sí, tal vez soy solo yo. Normalmente soy un desarrollador de C winform y aún no me interesan las cosas de html/javascript. Pero la aplicación que necesitamos construir no es como una subasta de centavos, pero se puede pensar en el mismo tipo de actualización cada segundo. – Julian

3

WebSync de Frozen Mountain es un servidor de cometas escalable completo para IIS y ASP.NET. Se integra perfectamente en su pila de aplicaciones para admitir comunicaciones de datos en tiempo real con miles de clientes por nodo de servidor.

Échale un vistazo, hay una edición de la comunidad disponible gratuitamente.

5

Hay una función SendToAll en PokeIn ASP.NET ajax library.

+0

La biblioteca en sí es bastante costosa. – arviman

Cuestiones relacionadas