我正在尝试向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
请让我知道一步一步的解决方案或任何文章参考,以便我能够轻松理解。
答案 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);
答案 1 :(得分:0)
如果要向特定用户发送消息,可以使用2.0版中的新方法
Clients.User(userId).send(message);
默认情况下,使用的用户ID是IPrincipal.Identity.Name
。如果您想使用自己的映射覆盖用户ID机制,请参阅此回复 - https://stackoverflow.com/a/21355406/2489038