Можно ли отфильтровать получателей в SignalR? - PullRequest
5 голосов
/ 05 марта 2012

Я столкнулся со следующей проблемой.Я хотел бы сделать следующее.Когда подключается новый клиент, групповой параметр отправляется на сторону сервера SignalR (в URL или другим способом).Затем я хочу уведомить только клиентов из определенной группы.

например

I have 3 clients:
1) with group parameter = a
2) with group parameter = a
3) with group parameter = b

Я хочу уведомить только клиентов с параметром группы == a.Если я использую динамическое поле Clients, оно отправит сообщение всем клиентам.Можно ли как-то отфильтровать приемники?

Ответы [ 2 ]

12 голосов
/ 06 марта 2012

Если вы хотите отправить сообщение всем членам группы, вам необходимо добавить клиента в группу. Вы можете определить имя группы или позволить клиентам выбирать. Например:

<script src="Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        var g = $.connection.groups;

        g.send = function (t) {
            $("#groups").append(t);
        };
        $("#btnJoin").click(function () {
            g.addGroup($("#gr").val());
        });
        $("#btnSend").click(function () {
            g.sendMessage("a"); //for example a group.
        });
        $.connection.hub.start();
    });
</script>
<select id="gr">
    <option value="a">a</option>
    <option value="b">b</option>
    <option value="c">c</option>
</select>
<div id="groups"></div>
<input id="btnJoin" type="button" value="Join"/>
<input id="btnSend" type="button" value="Send"/>

public class Groups : Hub
{
     public void AddGroup(string groupName)
     {
         GroupManager.AddToGroup(Context.ClientId, groupName);
         Clients.send(Context.ClientId + " join " + groupName + " group.<br />");
     }

    public void SendMessage(string groupName)
    {
        Clients[groupName].send(groupName + " group - Hello Everybody!");            
    }
}
0 голосов
/ 14 мая 2015

Синтаксис h для SignalR2 теперь выглядит следующим образом:

Работа с группами в SignalR

пример:

public class ContosoChatHub : Hub
{
    public Task JoinRoom(string roomName)
    {
        return Groups.Add(Context.ConnectionId, roomName);
    }

    public Task LeaveRoom(string roomName)
    {
        return Groups.Remove(Context.ConnectionId, roomName);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...