我遇到了以下问题。我想做以下事情。 当连接新客户端时,组参数将被发送到SignalR服务器端(以URL或其他方式)。 然后我想只通知特定组的客户。
e.g。
I have 3 clients:
1) with group parameter = a
2) with group parameter = a
3) with group parameter = b
我想只通知组参数== a的客户端。 如果我使用动态字段客户端,它将为所有客户端发送消息。 是否有可能以某种方式过滤接收器?
答案 0 :(得分:12)
如果要向所有组成员发送消息,则需要在组中添加客户端。您可以定义组名称,也可以让客户选择。例如:
<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!");
}
}
答案 1 :(得分:0)
SignalR2的语法现在如下
示例:
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);
}
}