从SignalR呼叫特定客户端

时间:2011-10-24 07:47:30

标签: asp.net signalr

我想从服务器调用特定客户端,而不是向所有客户端广播。问题是我在一些AJAX请求的范围内(在.aspx代码后面说),而不是在Hub或PersistentConnection中,所以没有Clients属性 - 而且那个调用ajax(jquery)的客户端不是客户端我想发送信号消息!

现在,我有一个在JS页面加载时调用的集线器,它将新客户端注册到服务器静态列表中,因此我有客户端Guids。但是不知道如何使用它从服务器向特定客户端发送消息。

5 个答案:

答案 0 :(得分:44)

答案 1 :(得分:20)

$('#sendmessage').click(function () {
    // Call the Send method on the hub. 
    chat.server.send($('#displayname').val(), $('#message').val(), $.connection.hub.id);
    // Clear text box and reset focus for next comment. 
    $('#message').val('').focus();
});

在服务器端发送客户端的id并响应该id

  public void Send ( string name , string message , string connID )
  {
        Clients.Client(connID).broadcastMessage(name , message);
  }

答案 2 :(得分:10)

每次向中心服务器发送请求时,您的请求都会有不同的连接ID,因此,我添加了一个包含用户名的静态哈希表 - 没有连续变化,并且信号r的连接ID,每次连接时,连接ID都会更新

 $.connection.hub.start().done(function () {
   chat.server.registerConId($('#displayname').val());
 });

并在服务器代码中:

public class ChatHub : Hub
{
    private static Hashtable htUsers_ConIds = new Hashtable(20);
    public void registerConId(string userID)
    {
        if(htUsers_ConIds.ContainsKey(userID))
            htUsers_ConIds[userID] = Context.ConnectionId;
        else
            htUsers_ConIds.Add(userID, Context.ConnectionId);
    }
}

答案 3 :(得分:1)

如果特定用户实际上是自己的来电者,您可以使用:

Clients.Caller.myJavaScriptClientFunction();

答案 4 :(得分:1)

当您要向特定ID

发送消息时
 Clients.Client(Context.ConnectionId).onMessage(
               new Message{From = e.Message.From, Body = e.Message.Body}
               );