2012-11-12 68 views
11

我有一个asp.net经典网站。我得到了SignalR的基本功能(一个客户端向其他客户端发送消息)。但现在我想只发送消息到特定的连接ID。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(); 
       }); 


      }); 

问题是,我真的不知道如何发送到一个特定的ConnectionId与枢纽,因为Clients.updateMessages(消息);发送消息给他们所有人。我如何解决这个问题?

P.S:香港专业教育学院已经看了看:Send server message to connected clients with Signalr/PersistentConnection

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

是didnt工作。

回答

18

那么,你可以从一个中心发送消息给一个客户端,像这样:

Clients.Client(someConnectionIdIWantToSendToSpecifically).doSomething(); 

关键是你需要知道你想要将消息发送到连接ID。更具体地说,您可能想知道您希望发送消息的逻辑标识,因为逻辑标识可能具有多个连接,或者在完全不同的连接标识下丢弃和重新连接。连接映射到逻辑身份是SignalR留给应用程序本身的东西。

+1

我这样做是为了在用户登录后,connectionID将始终与用户ID相同。在我的应用程序中,我这样做是为了在用户按下发送按钮之后,我发现谁是folower,并只发送消息给那些连接ID。我不知道这是否明智之举。任何想法如何以更聪明的方式实现它? – Timsen

+1

我见过的大多数实现都使用逻辑用户标识与活动连接标识的一对多关系映射。 –

+0

最后一个问题,如果我发送消息给离线的connectionID,会发生什么? – Timsen