从SignalR呼叫特定客户端

Hrv*_*udo 65 asp.net signalr

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

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

dav*_*owl 44

查看最新文档:

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

枢纽 - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server

  • 有没有人有设置客户端ID的样本而不是使用自动生成的? (19认同)
  • IMO如果您只是要提供文档链接,那么它应该只是对问题的评论. (19认同)
  • 对于那些对挖掘wiki不感兴趣的人(我强烈建议你这样做 - 这太棒了),似乎connection.BroadCast(clientId,messageHere)已经被Send(clientId,data)简单地取代了. (4认同)
  • "Client = connection",因此每个请求都会为您提供一个新的客户端ID.在SignalR的下一个版本中,我们将覆盖生成客户端ID的逻辑,以便您可以将其与更相关的内容相关联.现在,您应该将客户端ID与应用程序相关的内容(如用户名)相关联. (3认同)
  • 这个问题目前正在[meta]上讨论(http://meta.stackoverflow.com/q/308640/4639281) (3认同)
  • 你可以把评论中的信息折回到答案davidfowl吗?想象一下,链接已经死了(他们移动了,github死了,asp.net已经不复存在,等等). (2认同)

小智 24

$('#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();
});
Run Code Online (Sandbox Code Playgroud)

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

  public void Send ( string name , string message , string connID )
  {
        Clients.Client(connID).broadcastMessage(name , message);
  }
Run Code Online (Sandbox Code Playgroud)

  • $ .connection.hub.id是`undefined`? (5认同)
  • 我认为`Send()`中的`Clients.Client(connID)`返回相同的客户端,该客户端实际上调用`Send`函数开始。有什么意义? (2认同)

Nad*_*uli 10

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

 $.connection.hub.start().done(function () {
   chat.server.registerConId($('#displayname').val());
 });
Run Code Online (Sandbox Code Playgroud)

并在服务器代码中:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)