2012-11-12 21 views
11

私はasp.netの古典的なウェブサイトを持っています。 iveはSignalRの基本的な機能を持っていました(1人のクライアントが残りのクライアントにメッセージを送る場所)。しかし、今私は特定のconnectionsIDsにのみメッセージを送信したい。SignalRは単一の接続IDにメッセージを送信します

私のハブ:

** [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コード:

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


      }); 

問題は、私は本当にClients.updateMessages(メッセージ以来、ハブにある特定のConnectionIDに送信する方法を知りませんで);それらのすべてにメッセージを送信します。どのように私はこれを解決するのですか?

P.Sは:Send server message to connected clients with Signalr/PersistentConnection

と働いていたdidntの

http://riba-escapades.blogspot.dk/2012/05/signalr-send-messages-to-single-client.html:すでに見アイブ。

答えて

18

さて、あなたはそうのようなハブから単一のクライアントにメッセージを送ることができます。

Clients.Client(someConnectionIdIWantToSendToSpecifically).doSomething(); 

トリックは、あなたがにメッセージを送信する接続IDを知っておく必要があります。さらに具体的には、論理IDが複数の接続を持つ可能性があるため、まったく異なる接続IDの下で切断して再接続したため、メッセージを送信したいことの論理的な識別も知りたいと思うかもしれません。論理的なアイデンティティへの接続のマッピングは、SignalRがアプリケーション自体に任せるものです。

+1

ユーザーがログインした後、connectionIDは常にuserIDと同じになるようにしました。私のアプリケーションでは、ユーザーが送信ボタンを押した後に誰が私のためにフォローされているのかを知り、それらの接続IDだけにメッセージを送信するようにしました。私はそれがスマートな動きであるかどうかは分かりません。どのようにスマートな方法でそれを実装するための任意のアイデア? – Timsen

+1

私が見た実装のほとんどは、論理的なユーザーIDとアクティブな接続IDの1対多の関係マッピングを使用しています。 –

+0

最後の質問ですが、オフラインのconnectionIDにメッセージを送信するとどうなりますか? – Timsen

関連する問題