Позвоните конкретному клиенту из SignalR - PullRequest
63 голосов
/ 24 октября 2011

Я хочу позвонить конкретному клиенту с сервера, а не транслировать их всем. Проблема в том, что я нахожусь в рамках некоторого AJAX-запроса (в .aspx codebehind, скажем так), а не в Hub или PersistentConnection, поэтому у меня нет свойства Clients - и клиент, который сделал этот вызов ajax (jquery), не является клиентом Я хочу отправить сообщение сигнализатора!

Теперь у меня есть один концентратор, который вызывается при загрузке страницы JS, который регистрирует нового клиента в статическом списке сервера, поэтому у меня есть клиентские направляющие. Но не знаю, как использовать это для отправки сообщения с сервера конкретному клиенту.

Ответы [ 5 ]

44 голосов
/ 24 октября 2011

Последние документы см. В документах:

Постоянные соединения - https://github.com/SignalR/SignalR/wiki/PersistentConnection

Концентраторы - http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server

21 голосов
/ 23 марта 2013
$('#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();
});

на стороне сервера отправьте идентификатор клиента и ответ на этот идентификатор

  public void Send ( string name , string message , string connID )
  {
        Clients.Client(connID).broadcastMessage(name , message);
  }
10 голосов
/ 31 августа 2014

Каждый раз, когда вы отправляете запрос на хаб-сервер, ваш запрос будет иметь другой идентификатор соединения, поэтому я добавил статическую хеш-таблицу, содержащую имя пользователя, которое не меняется непрерывно, и идентификатор соединения для сигнала r, при каждом подключении идентификатор соединения будет обновляться

 $.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);
    }
}
1 голос
/ 27 октября 2016

когда вы хотите отправить сообщение на конкретный идентификатор

 Clients.Client(Context.ConnectionId).onMessage(
               new Message{From = e.Message.From, Body = e.Message.Body}
               );
1 голос
/ 28 марта 2016

Если конкретный пользователь сам является вызывающим абонентом, вы можете использовать:

Clients.Caller.myJavaScriptClientFunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...