サーバーから特定のクライアントを呼び出したいのですが、すべてのクライアントにブロードキャストしたくありません。問題は、私がいくつかのAJAXリクエストのスコープ内にいることを言います)。 ajax(jquery)呼び出しは、シグナルメッセージを送信するクライアントではありません。
これで、JSページの読み込み時に呼び出されるハブが1つあり、新しいクライアントがサーバー静的リストに登録されるため、クライアントGUIDがあります。しかし、それを使用してサーバーから特定のクライアントにメッセージを送信する方法がわかりません。
$('#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}
);