Radiodiffusion message à tous les clients (à l'exception de l'auto dans SignalR
Je me rends compte que ces questions sont similaires:
SignalR - Diffusion pour tous les clients (à l'exception de l'Appelant
Envoyer un message à tous les clients dans un Groupe, sauf pour le client actuel
Cependant, ils sont vieux et rien dans la documentation en cours m'a donné des indices quant à savoir si je suis en train de faire la bonne chose ou pas.
Voici la question/problème:
J'ai besoin d'être en mesure de diffuser un message à partir du côté serveur à tous les clients connectés sauf le mec qui a soumis la requête http imaginer que quelqu'un de la soumission d'un formulaire et tous les gens qui sont connectés à la même forme d'être informé que quelque chose a été soumis.
La façon dont je le fais que maintenant, c'est quelque chose comme ceci:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
var connectionID = HttpContext.Request.Cookies["conn-id"].Value;
context.Clients.AllExcept(connectionID).addMessage(message);
Et chaque fois qu'une connexion est établie, j'ai mis ConnectionID dans un cookie sur le côté client de la manière suivante:
$.connection.hub.start().done(function(){
$.cookie("conn-id",$.connection.hub.id);
});
Donc mes questions sont:
- Est-ce la meilleure/la seule approche que je peux prendre dans ce cas? Puis-je lire l'identifiant de connexion du client à l'origine de la demande de quelque chose comme
hub.Context.ConnectionID
ou quelque chose de similaire à la façon dont vous voulez obtenir leSessionID
de HttpContext.Actuel.Session.SessionID? - Puis-je régler l'id de connexion par programmation lorsqu'un client se connecte par la valeur de l'id de session, par exemple? Que cela pourrait-il poser un problème pour une raison quelconque? Si oui, pouvez-vous s'il vous plaît expliquer comment configurer l'IDENTIFIANT de connexion par programmation et à l'événement qui dois-je brancher pour le faire?
J'ai remarqué que chaque fois que la page est rechargée, l'identifiant de connexion est modifié pour un autre guid. Comment définissez-vous le ConnectionId qu'une seule fois et de le maintenir au moins pour la durée de la Session?
OriginalL'auteur Icarus | 2013-06-21
Vous devez vous connecter pour publier un commentaire.
De votre approche du travail, cependant, l'approche correcte consiste à utiliser le construit en API:
Clients.Others.addMessage(message)
. Aussi il n'est pas nécessaire pour obtenir le hub contexte à l'intérieur du moyeu lui-même. Vous pouvez toujours accéder à la connexion ID à partir du Contexte.ConnectionId ou envoyer un message sto clients par le biais de Clients.Tous les.foo();Et vous ne pouvez pas définir la ConnectinoID par programmation. Si vous souhaitez effectuer le suivi des utilisateurs à travers les pages de maintenir une liste d'utilisateurs sur votre serveur et puis tout simplement ré-attribuer l'id de connexion comme ils naviguer à travers le site.
Voici un post expliquant le suivi des utilisateurs: SignalR 1.0 beta usine de raccordement
OriginalL'auteur N. Taylor Mullen
Si vous envoyez le message dans une méthode de la classe Hub, vous pouvez également utiliser des Clients.D'autres exclure le client appelant. Vous avez seulement besoin d'utiliser AllExcept(id) si vous n'êtes pas dans un hub méthode.
Voir la suite pour plus de détails:
http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server#selectingclients
OriginalL'auteur Patrick Fletcher