Pregunta

En primer lugar, estoy creando algo así como una solución de cliente / servidor utilizando un sitio web de ASP.NET estándar, sí sé que este método no está diseñado, ¡y la mayoría de las personas les encantaría gritar "Comet!" o "Sockets HTML5!" - Pero por favor no lo hagas ;-)!

lo que estoy haciendo ...

Estoy creando un MMORPG en un sitio web.

Tengo varios clientes a los que necesitan estar en contacto al mismo tiempo. Esto se hace mediante un objeto global en el ámbito de aplicación.

mi problema

Necesito invocar un evento a varios clientes. Por ejemplo, cuando se ha realizado un ataque, necesito actualizar algunos gráficos. La lógica de ataque se resuelve en el objeto global, pero cada uno de los clientes tiene que responder a esto.

ahora mismo hago lo siguiente:

   fightTrace.Reciever.InvokeMoveEnded(this);
   fightTrace.FiredBy.InvokeMoveEnded(this);

(Este es un tipo de patrón de observador)

Qué suceda ahora es una condición de raza. El que carga el evento Page_load obtendrá ambos eventos, y el que no los está ejecutando, no experimentará cambios en la UI.

Entonces, ¿qué es lo que realmente quiero?

Lo que realmente necesito es una forma genuina y agradable de crear un patrón de observador a través del estado de la aplicación. Necesito enviar un evento a cada "oyente" que está en este caso es un cliente, y luego hacer una actualización.

Una forma de hacer esto es una cosa de la sesión, con verdadero / falso. ¡Pero realmente me gustaría algo mejor!

¡Gracias!

¿Fue útil?

Solución

Si entendí su contexto correctamente, siempre que se cambie el estado de su solicitud de estado, desea sincronizar a todos los clientes de sus aplicaciones.Lo que está olvidando aquí es el comportamiento sin estado del protocolo HTTP.Una vez que se envía una respuesta, se pierde la conexión, debe enviar una solicitud HTTP nuevamente para ser servida nuevamente.Sin embargo, puede emular algo utilizando la gestión estatal y las actualizaciones cortas y oportunas basadas en AJAX para simular un entorno conectado.Sin embargo, tengo que pronunciar las palabras que no quieres escuchar.No recomendado.

En su lugar, lo que puede hacer es guardar el estado del objeto de la aplicación y siempre que la solicitud viene a la respuesta basada en el estado actualizado de su objeto.Cualquier forma de que un cliente tenga que iniciar una solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top