signalR的客户特定消息

时间:2014-01-24 12:26:49

标签: c# javascript angularjs signalr

我正在尝试向SignalR客户端发送消息,但它不应该向所有人广播,我浏览了很多关于clientId和group的文章,但没有给出简单的例子或要点。我的客户端代码如下:

proxy: null,

//Getting the connection object
connection = .hubConnection('url')

//Creating proxy
this.proxy = connection.createHubProxy('SignalRServerHub');
this.proxy.on('displayStatus', function (a) {
   SignalRMessageTableService.getDataFromServer()
});

//Starting connection
connection.start()
//we are able to capture connection.id here
//under .done function but not sure how to use

请让我知道一步一步的解决方案或任何文章参考,以便我能够轻松理解。

2 个答案:

答案 0 :(得分:4)

要使用connectionId响应特定客户端,您可以执行以下操作:

       var connectionId = Context.ConnectionId;
       Clients.Client(connectionId).someMethod(resultValue);

或仅响应来电者:

    Clients.Caller.someMethod(resultValue);

这些调用是在您的集线器类中的公共方法中进行的,并且也是这样做的。

编辑:

看起来应该扩展一下connection.start()。如果服务器要在调用者处返回数据或回调事件,则不需要处理connectionId。这将由服务器完成,并由上面公布的方法处理。

尝试将connection.start()行更改为以下内容:

connection.start().done(function() {
    $('#someButton').click(function () {
        var param1 = $('#someField').val();
        var param2 = $('#someField2').val();
        this.proxy.invoke('myHubMethod', param1, param2, paramN);
    });
});

是否需要将此更改应用于您的实施。此代码基于您在文档中找到的代码。由于看起来您不使用生成的代理,我们在代理上使用invoke方法来告知哪个方法以及我们要发送的参数。这也会将事件连接到一个id=someButton的按钮,点击时会触发集线器上的myHubMethod

替代方案就像(使用生成的代理):

this.proxy.server.myHubMethod(param1, param2, paramN);

您应该查看ASP.NET SignalR Hubs API Guide - JavaScript Client

答案 1 :(得分:0)

如果要向特定用户发送消息,可以使用2.0版中的新方法

Clients.User(userId).send(message);

默认情况下,使用的用户ID是IPrincipal.Identity.Name。如果您想使用自己的映射覆盖用户ID机制,请参阅此回复 - https://stackoverflow.com/a/21355406/2489038