visual studio microsoft español descargar community c# silverlight wcf design-patterns polling

c# - studio - ¿Cuál es el mejor diseño/forma de mantener al usuario conectado?



visual studio community (3)

Básicamente se trata de poder enviar datos al cliente desde el servidor. Así que pensé que era una arquitectura de editor de suscriptor, puede crear una cola (en una tabla db para ex) en el servidor para cada uno de los usuarios que están conectados, y tienen un ajax llamando a un servicio web que extraerá datos de la tabla.

Cada mensaje debe estar encapsulado como un comando para el cliente. De modo que puede usar diferentes mensajes para cada operación de los que el cliente es capaz. {comando: pantalla, texto: "usuario blah blah ha iniciado sesión"} otro comando podría verse como {comando: rolldice, texto: "lanzar los dados"}

Déjame saber lo que piensas...

Estoy trabajando en un POC para autoaprendizaje en el que quiero mantener mi usuario conectado en el patrón VIVO. Por ejemplo, un juego en el que 4 usuarios pueden jugar a la vez, aquí necesito mantener este usuario conectado a mi juego.

M no es bueno en el tipo de programación de Socket y me encanta hacerlo en Servicios. Lo que sí sé es ''¿Cuál es la mejor manera de hacerlo?''. De acuerdo con mi Brain Storming inicial, he decidido usar SilverLight (en el navegador o fuera del navegador) como Front end [no tengo ningún problema en eso].

Estoy más preocupado en back-end. O hago un controlador o hago un servicio WCF o uso el servicio dúplex completo y uso el mecanismo de agrupamiento para eso. Como una idea al azar, se me ocurre una lógica tipo Timer que se activará cada 10 segundos al final del cliente y obtendrá un estado como

  • Ahora es su turno de tirar un dado

  • En casa muchos usuarios se fueron (en caso de que les quedara alguno)

  • ¿Qué es el estado de usuario conectado en el juego como puntuación / puntos ect y actualización?
    juego de vista de acuerdo con esto en su extremo

Por favor coloque sus mejores respuestas aquí que me ayudarán a aprender esto.

Saludos y gracias de antemano

EDITAR:

Iniciando Bounty ya que necesito más comentarios.

FH



Fasih,

Como HTTP no tiene estado, no puede establecer una comunicación bidireccional desde su código. Pero hay una solución alternativa si está usando AJAX. Como dijiste, el cronómetro es de una sola dirección. Otro se llama COMET o AJAX inverso.

Esto simula la comunicación bidireccional sin depender del temporizador. Para lograr esto, debe hacer una larga ejecución de llamadas AJAX al servidor, y la llamada solo se devuelve si hay un cambio para actualizar. Supongamos un escenario simple de chat web. 2 usuarios hacen largas llamadas AJAX al servidor, y ambos sondean el medio común (digamos DB), si el usuario1 envía un poco de texto, se actualizará y el usuario 2 esperará que la llamada AJAX recoja el texto y lo devuelva. Y de nuevo, ambos usuarios harán una llamada de larga duración para escucharse unos a otros.

Como ya decidió seguir adelante con Silverlight, puede usar el canal dúplex WCF para emular la comunicación bidireccional. Como expliqué anteriormente, no vaya con la lógica del temporizador. No es instantáneo si estás sondeando el servidor durante 10 segundos (cualquier cosa puede suceder en un juego en 10 segundos) y aumentará la carga del servidor si sondeas por cada segundo.

Así que evite la lógica del temporizador y use llamadas AJAX de larga ejecución.

Si busca opciones distintas de los canales dúplex WCF, los sockets web HTML5 y los COMET son otras formas de hacerlo.

echa un vistazo a esta publicación para navegadores compatibles con web socokets.