2012-08-01 5 views
13

Si tengo varias páginas que podrían usar múltiples clases de concentrador, ¿cuál es la mejor manera de gestionar esto?Múltiples conexiones/concentradores de señalR en su sitio web

-Es malo navegar a otra página en el sitio web y esencialmente "volver a abrir" la conexión a la misma clase de concentrador que estaba abierta en la página anterior?

-Las múltiples conexiones de hub en una página están bien porque todas están unificadas en una conexión, incluso si son diferentes clases de hub?

Respuesta

8

Para comenzar con Hubs, lea WIKI entry for Hubs y Client Side of Hubs. Hay un par de cosas de acuerdo con el contexto de varias páginas.

  1. Al iniciar un centro que le da a su cliente un documento de identidad que se mantiene la misma para ese centro (alguien puede confirmar con el ejemplo) a través de múltiples páginas.
  2. No está mal volver a abrir la conexión al mismo concentrador. Es posible que el método hub.start del cliente se ejecute en todas las páginas; sin embargo, si un cliente abre varias ventanas o pasa de una página a otra, tendrá la misma ID de conexión en ese concentrador para que pueda mantenerse en contacto. Si se trata de múltiples concentradores, debe gestionar los centros así como los ID de conexión. Entonces, esta pregunta es como "¿Es malo tener múltiples ISP que sirven mi conexión a Internet para diferentes sitios web". Puedes tenerlos, pero es un exceso. Un solo ISP puede serverle todas las páginas a usted también.
  3. Los múltiples concentradores en una sola página no son ideales, pero funcionarán. De nuevo, la respuesta necesita un poco de contexto para el problema, pero en general puede diferenciar entre varias solicitudes en la misma ID de conexión a través de grupos o utilizando otro enfoque basado en parámetros. Tener dos concentradores en la misma página puede llevar más recursos (es necesario probar esto) que usar parámetros o grupos para separar diferentes áreas de mensajes.

Ejemplo:

Tienes una página que tiene dos partes, una gráfica que muestra la actividad del usuario en tiempo real y una zona para ver los cambios de datos en tiempo real realizadas por los usuarios como una mesa. ¿Creará dos centros o dos grupos o qué? Hay otras páginas que usan el mismo gráfico y tabla de datos.

Mi Solución:

  1. Voy a crear un único centro para la aplicación para recibir los datos en tiempo real desde el servidor.
  2. Crearé diferentes métodos en el servidor para enviar puntos de gráficos y tablas de datos.
  3. Crearé el método del lado del cliente en todas las páginas que usan estos gráficos para comunicarme con los métodos del servidor en el mismo concentrador.

Al cambiar de una página a otra, el cliente se conectará con el mismo concentrador y solicitará getGraph o getDataTable o ambos y completará su cliente con datos relevantes. Del mismo modo en el servidor cuando los datos cambian puede llamar al método del lado del cliente para actualizar todos los clientes o grupo de ellos (agreguemos esta complejidad)

Supongamos que tiene estudiantes y profesores mirando su aplicación. Requieren un diferente nivel de acceso a los datos. Puede usar grupos para mantenerlos separados en el centro, por lo que no está enviando información de maestros a los estudiantes y datos de los estudiantes a los maestros.

  1. En su unión hub puede agregarlas para unirse a un grupo asociado con su función o cualquier función diferenciadora.
  2. Cuando envía a todos los clientes, ahora puede enviarlo a grupos de clientes que son profesores o estudiantes. No creando otro centro para profesores o estudiantes, todos están en el mismo centro.

Volviendo a su pregunta de "es malo" y "está bien", esto es difícil de establecer sin contexto de aplicación real. No puedo pensar en un escenario en el que puedas justificar varios centros aparte de Performance.

+0

La aplicación tiene diferentes concentradores para diferentes tipos de datos. Nuestra aplicación es bastante grande, y es una separación lógica de preocupaciones. Algunos clientes front-end solo necesitan un subconjunto de datos activos, y tiene sentido tener un centro al que puedan conectarse, en lugar de administrar grupos. –

+0

Según lo sugerido por @sam en respuesta, puede hacerlo y se explica aquí http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs –

+0

I Estoy enterado, y así es como he configurado mi aplicación. Solo estaba comentando porque dijiste que no puedes pensar en un escenario donde puedas justificar varios centros –

18

Puede tener múltiples concentradores que comparten una conexión en su sitio. SignalR 2.0 fue actualizado para manejar múltiples concentradores en una conexión de señal sin pérdida de rendimiento.

documentos oficiales: http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#multiplehubs

Todos los clientes utilizarán la misma URL para establecer una conexión SignalR con su servicio ("/ signalr" o la URL personalizada si se ha especificado uno), y esa conexión se utiliza para todos los concentradores definidos por el servicio.

Hay sin diferencia de rendimiento para varios concentradores en comparación con la definición de todas las funcionalidades del concentrador en una sola clase.

Cuestiones relacionadas