73

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

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

4

5 回答 5

48

有关最新信息,请参阅文档:

持久连接 - https://github.com/SignalR/SignalR/wiki/PersistentConnection

集线器 - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server

于 2011-10-24T07:56:55.570 回答
26
$('#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);
  }
于 2013-03-22T22:14:25.073 回答
13

每次您向中心服务器发送请求时,您的请求都会有不同的连接 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);
    }
}
于 2014-08-31T12:24:35.000 回答
3

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

 Clients.Client(Context.ConnectionId).onMessage(
               new Message{From = e.Message.From, Body = e.Message.Body}
               );
于 2016-10-27T05:02:24.947 回答
1

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

Clients.Caller.myJavaScriptClientFunction();
于 2016-03-28T16:10:42.390 回答