当我向我订阅的 signalR 组发送消息时,我会收到消息!
我不想要这个,我希望它把消息发送给组中的其他人。
这可能吗?如何?
您可以在这里做的是您可以将 ConnectionId 发送到客户端并进行检查。例如,以下是您的集线器:
[HubName("moveShape")]
public class MoveShapeHub : Hub
{
public void MoveShape(double x, double y)
{
Clients.shapeMoved(Context.ConnectionId, x, y);
}
}
在客户端级别,您可以执行以下操作:
var hub = $.connection.moveShape,
$shape = $("#shape"),
$clientCount = $("#clientCount"),
body = window.document.body;
$.extend(hub, {
shapeMoved: function (cid, x, y) {
if ($.connection.hub.id !== cid) {
$shape.css({
left: (body.clientWidth - $shape.width()) * x,
top: (body.clientHeight - $shape.height()) * y
});
}
}
});
编辑
从 SignalR 1.0.0-alpha 开始,如果您使用的是集线器,则有一个内置 API:
[HubName("moveShape")]
public class MoveShapeHub : Hub
{
public void MoveShape(double x, double y)
{
Clients.Others.shapeMoved(x, y);
}
}
这将向所有人广播数据,但呼叫者除外。
现在有了 SignalR,您可以使用
Clients.OthersInGroup("foo").send(message);
这正是你所追求的。它将向除呼叫者之外的组中的每个人发送 SignalR 客户端消息。
您可以在此处阅读更多信息:SignalR wiki Hubs