4

当我向我订阅的 signalR 组发送消息时,我会收到消息!

我不想要这个,我希望它把消息发送给组中的其他人。

这可能吗?如何?

4

2 回答 2

5

您可以在这里做的是您可以将 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);
    }
}

这将向所有人广播数据,但呼叫者除外。

于 2012-10-15T14:10:02.890 回答
5

现在有了 SignalR,您可以使用

Clients.OthersInGroup("foo").send(message);

这正是你所追求的。它将向除呼叫者之外的组中的每个人发送 SignalR 客户端消息。

您可以在此处阅读更多信息:SignalR wiki Hubs

于 2013-01-10T12:28:03.853 回答