2012-11-12 9 views
11

Ich habe eine asp.net klassische Website. ive hat die SignalR-Grundfunktionalität zum Funktionieren gebracht (wobei ein Client Nachrichten an den Rest der Clients sendet). aber jetzt möchte ich Nachrichten nur an bestimmte connectionsIDs senden.SignalR Nachricht an einzelne Verbindung sendenId

mein Hub:

** [HubName("chatHub")] 
    public class ChatHub : Hub 
    { 
     public static List<string> messages = new List<string>(); 

     public void GetServiceState() 
     { 
      Clients.updateMessages(messages); 
     } 

     public void UpdateServiceState() 
     { 
      messages.Add(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")); 

      Clients.updateMessages(messages); 
     } 

    }** 

Asp Code:

 <script type="text/javascript"> 
      $(function() { 
       // creates a proxy to the health check hub 

       var healthCheckHub = $.connection.chatHub; 
       console.log($.connection.hub) 
       // handles the callback sent from the server 
       healthCheckHub.updateMessages = function (data) { 
        $("li").remove(); 

        $.each(data, function() { 
         $('#messages').append('<li>' + this + '</li>'); 
         console.log($.connection); 
        }); 
       }; 

       $("#trigger").click(function() { 
        healthCheckHub.updateServiceState(); 
       }); 

       // Start the connection and request current state 
       $.connection.hub.start(function() { 
        healthCheckHub.getServiceState(); 
       }); 


      }); 

Problem ist, ich weiß wirklich nicht, wie man eine bestimmte ConnectionID mit Nabe zu schicken, da Clients.updateMessages (Nachrichten); Sende Nachrichten an alle von ihnen. Wie löse ich das?

P. S: ive schon sah: Send server message to connected clients with Signalr/PersistentConnection

und http://riba-escapades.blogspot.dk/2012/05/signalr-send-messages-to-single-client.html

die funktionierte den Ball hielt.

Antwort

18

Nun, können Sie eine Nachricht an einen einzelnen Client von einem Hub wie so senden:

Clients.Client(someConnectionIdIWantToSendToSpecifically).doSomething(); 

Der Trick ist, dass Sie die Verbindungs-ID Sie die Nachricht senden möchten wissen müssen. Genauer gesagt möchten Sie wahrscheinlich auch die logische Identität der Sache kennen, an die Sie die Nachricht senden möchten, da diese logische Identität mehrere Verbindungen haben könnte oder unter einer völlig anderen Verbindungs-ID fallen gelassen und wieder verbunden wurde. Die Zuordnung von Verbindungen zu logischen Identitäten überlässt SignalR der Anwendung selbst.

+1

Ich habe es so gemacht, dass, nachdem Benutzer angemeldet ist, connectionID immer gleich wie userID ist. In meiner Anwendung habe ich es so gemacht, dass, nachdem der Benutzer die Schaltfläche "Senden" gedrückt hat, ich herausfinde, wer für mich zuständig ist und Nachrichten nur an diese Verbindungs-IDs sende. Ich weiß nicht, ob das ein kluger Schachzug ist. Irgendwelche Ideen, wie man es intelligenter implementieren kann? – Timsen

+1

Die meisten Implementierungen, die ich bisher gesehen habe, verwenden eine Eins-zu-viele-Zuordnung der logischen Benutzeridentität zu aktiven Verbindungs-IDs. –

+0

Letzte Frage, was passiert, wenn ich eine Nachricht an eine connectionID sende, die offline ist? – Timsen

Verwandte Themen