我想从服务器呼叫特定的客户端,而不是广播给所有的客户端。问题是我属于某些AJAX请求的范围(在.aspx代码后面,可以说),而不属于Hub或PersistentConnection,因此没有Clients属性-进行该ajax(jquery)调用的客户端不是该客户端我想发送信号器消息!
现在,我有一个在JS页面加载时调用的中心,它将新客户端注册到服务器静态列表中,因此我有客户端Guid。但是不知道如何使用它从服务器向特定客户端发送消息。
Answers:
$('#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);
}
undefined
?
Clients.Client(connID)
在Send()
返回中,实际上是从该客户端Send
开始调用该函数的客户端。这意味着该Send
函数实际上将向同一客户端广播消息。有什么意义?
每次将请求发送到集线器服务器时,您的请求将具有不同的连接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);
}
}