首页 文章

从SignalR呼叫特定客户端

提问于
浏览
60

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

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

5 回答

  • 1
    $('#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);
      }
    
  • 44

    每次向中心服务器发送请求时,您的请求都会有不同的连接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);
        }
    }
    
  • 1

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

    Clients.Caller.myJavaScriptClientFunction();
    
  • 19

    当您想要向特定ID发送消息时

    Clients.Client(Context.ConnectionId).onMessage(
                   new Message{From = e.Message.From, Body = e.Message.Body}
                   );
    

相关问题