SignalR push-notification au client spécifique avec MVC4
Je suis en train d'utiliser SignalR avec MVC4 projet c# pour envoyer des notifications push à une sélection de clients seulement.
Pour cela, je suis en utilisant contexte.Clients.Client " par le stockage.ConnectionId' en c# static variable {depuis pas utiliser de session avec signalr}.
Mais depuis contextConnectionId' est une variable statique; le message est toujours boardcasted à tous les clients 🙁
Est-il une alternative à la séance avec signal ou de toute autre manière élégante de le faire? (trouvé quelques post mais pas de réponses spécifiques)
Code comme ci-dessous:
javaScript
$(document).ready(function (){
{
var chat = $.connection.PushNotify;
chat.client.addNewMessageToPage = function (type, message) {
if(type == "something")
{
alert(message);
}
}
//Start the connection.
$.connection.hub.start().done(function () {
chat.server.send($('').val(), $('').val());
});
)}
En c# HUB
[HubName("PushNotify")]
public class PushNotify : Hub
{
public void Send(string name, string message)
{
//assume its c# static variable
GlobalVariable.contextConnectionId = Context.ConnectionId;
}
}
public class PushNotification
{
public void SendMessage(string message, string type = "msg")
{
if (!string.IsNullOrEmpty(GlobalVariable.contextConnectionId))
{
var context = GlobalHost.ConnectionManager.GetHubContext<PushNotify>();
context.Clients.Client(GlobalVariable.contextConnectionId).addNewMessageToPage(type, message);
}
}
}
je pense que vous pouvez utiliser du groupe.asp.net/signalr/overview/guide-to-the-api/working-with-groups
Cela peut être intéressant: asp.net/signalr/overview/guide-to-the-api/...
Cela peut être intéressant: asp.net/signalr/overview/guide-to-the-api/...
OriginalL'auteur 10K35H 5H4KY4 | 2015-07-03
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous exemple fonctionne comme prévu. Lorsque vous mappez votre connexion à votre variable statique de vous remplacer votre variable statique de la dernière connexion qui Envoyer de méthode.
Ce qui signifie que votre
GlobalVariable.contextConnectionId
ne peut pas être une simple chaîne de caractères. Vous devez mapper vos clients d'une manière, et chaque client va avoir un unique id de connexion. Peut-être un dictionnaire serait suffisant ici, ou de la même classe contenant plus d'informations. (c'est à dire le navigateur info, IP adderss...)(La citation est à partir de ce lien) Ce qui devrait vous aider: http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections
MODIFIER
Fournir un peu plus d'informations:
Je crois que la solution la plus simple pour votre question est d'utiliser des groupes. http://www.asp.net/signalr/overview/guide-to-the-api/working-with-groups
Votre hub classe contenant une méthode pour se joindre à un groupe:
Et, disons, d'une PostMessage de groupe qui envoie à un groupe donné seulement:
Lorsque vos clients se joindre, ils peuvent se connecter à un groupe, et tout le reste sera géré par SignalR.
Rejoindre le groupe, entre le client et le message d'affectation:
La réception de messages est la même
AUTRE SOLUTION
Une autre solution pourrait être d'utiliser votre propre mappage ou la SignalR Connexion de cartographie. Ces solutions doit remplacer le OnConnected et OnDisconnected méthodes et de cartographier vos connexions. c'est à dire:
Comme dans cet exemple: http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections#inmemory
Sur la première (groupe) version: Où/quand le client appelle quitter ce groupe?
À titre d'exemple si j'ai une carte à la recherche pour les types d'élément (Véhicule, Utilisateur ... ) ceux-ci sont à venir de l'alimentation (SignalR) par le biais de certains groupes. Si je filtre soit des Véhicules sur l'INTERFACE, je pourrais aussi bien laisser le groupe de Véhicule mises à jour, puisque je n'ai même pas de les afficher en plus, je n'ai pas besoin d'up-to-date des données, il serait inutile de la circulation.
OriginalL'auteur DDan