2012-11-12 12 views
11

Ho un sito Web asp.net classico. Ive ha funzionato con la funzionalità di base SignalR (dove un client invia messaggi al resto dei client). ma ora voglio inviare messaggi solo a connessioni specifiche.SignalR invia messaggio a singola connessioneId

mia 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 codice:

 <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(); 
       }); 


      }); 

Il problema è che io non so davvero come inviare a un ConnectionID specifico con hub, in quanto Clients.updateMessages (messaggi); inviare messaggi a tutti loro. Come lo risolvo?

P.S: ive già guardato: Send server message to connected clients with Signalr/PersistentConnection

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

quella non ha funzionato.

risposta

18

Beh, si può inviare un messaggio a un singolo client da un hub in questo modo:

Clients.Client(someConnectionIdIWantToSendToSpecifically).doSomething(); 

Il trucco è che devi conoscere l'ID connessione che si desidera inviare il messaggio. Ancor più specificamente, probabilmente vorrai conoscere l'identità logica della cosa che vuoi inviare anche perché l'identità logica potrebbe avere più connessioni o essere scartata e ricollegata con un id di connessione completamente differente. La mappatura delle connessioni alle identità logiche è qualcosa che SignalR lascia all'applicazione stessa.

+1

Ho fatto in modo che dopo che l'utente ha effettuato l'accesso, connectionID sarà sempre uguale a userID. Nella mia applicazione ho fatto in modo che dopo l'utente premi il tasto invio, scopro chi è per me e invia messaggi solo a quegli ID di connessione. non so se si tratta di una mossa intelligente. Qualche idea su come implementarlo in modo più intelligente? – Timsen

+1

La maggior parte delle implementazioni che ho visto fare alle persone utilizzano un mapping di relazione uno-a-molti dell'identità utente logica agli ID di connessione attivi. –

+0

Ultima domanda, cosa accadrebbe se invio un messaggio a un connectionID che è offline? – Timsen

Problemi correlati