SignalR组:不要将消息发送回发件人

Joh*_*n H 4 signalr

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

我不希望这样,我希望它将消息发送给组中的其他人.

这可能吗?怎么样?

tug*_*erk 5

你可以在这里做的是你可以将ConnectionId发送到客户端并检查它.例如,下面是您的中心:

[HubName("moveShape")]
public class MoveShapeHub : Hub
{
    public void MoveShape(double x, double y)
    {
        Clients.shapeMoved(Context.ConnectionId, x, y);
    }
}
Run Code Online (Sandbox Code Playgroud)

在客户端级别,您可以执行以下操作:

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
            });
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑

从SignalR 1.0.0-alpha开始,如果您使用Hub,则有一个内置的API:

[HubName("moveShape")]
public class MoveShapeHub : Hub
{
    public void MoveShape(double x, double y)
    {
        Clients.Others.shapeMoved(x, y);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将播放除了来电者之外的所有人的数据.


Ben*_*son 5

现在使用SignalR即可使用

Clients.OthersInGroup("foo").send(message);
Run Code Online (Sandbox Code Playgroud)

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

您可以在这里阅读更多信息:SignalR wiki Hubs