从SignalR调用特定的客户端
我想从服务器调用特定的客户端,而不是广播给他们。 问题是,我在一些AJAX请求的范围(在.aspx代码隐藏让说),而不是在Hub或PersistentConnection,所以没有客户端属性 – 和客户谁使Ajax(jQuery)的调用不是客户端我想发送信号消息!
现在,我有一个集线器,它被称为JS页面加载,注册新的客户端到服务器静态列表,所以我有客户端GUID。 但不知道如何使用它从服务器发送消息到特定的客户端。
请参阅最新的文档:
持续连接 – https://github.com/SignalR/SignalR/wiki/PersistentConnection
集线器 – http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server
$('#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); }
每次向中心服务器发送一个请求时,你的请求都会有一个不同的连接标识,所以我添加了一个静态散列表,其中包含一个用户名,这个用户名不是连续变化的,每次都有一个连接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); } }
如果特定用户实际上是自己的主叫方,则可以使用:
Clients.Caller.myJavaScriptClientFunction();
当你想发送一个消息到特定的ID
Clients.Client(Context.ConnectionId).onMessage( new Message{From = e.Message.From, Body = e.Message.Body} );