c# – 向SignalR中的所有客户端发送消息,除了self

前端之家收集整理的这篇文章主要介绍了c# – 向SignalR中的所有客户端发送消息,除了self前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我意识到这些问题是相似的:

SignalR – Broadcast to all clients except Caller

Send a message to all clients in a Group,except for the current client

然而,他们是老的,现在的文件中没有任何东西给我任何关于我是否做正确的事情的线索.

这是问题/问题:

我需要能够从服务器端向所有连接的客户端发送消息,除了提交http请求的人之外 – 想象有人提交表单,并让所有连接到同一表单的人被通知已经提交的内容.

我现在这样做的方式是这样的:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
var connectionID = HttpContext.Request.Cookies["conn-id"].Value;
context.Clients.AllExcept(connectionID).addMessage(message);

并且每次建立连接时,我将ConnectionID设置在客户端的一个cookie中:

$.connection.hub.start().done(function(){ 
      $.cookie("conn-id",$.connection.hub.id); 
});

所以我的问题是:

在这种情况下,这是最好的/唯一的方法吗?我可以从hub.Context.ConnectionID等其他地方读取发起请求的客户端的连接ID,或者类似于从HttpContext.Current.Session.SessionID获取SessionID的方式吗?
>可以通过将客户端连接设置为SessionID,以编程方式设置连接ID吗?这可能是由于某些原因造成的吗?如果是这样,你可以解释如何以编程方式设置连接ID,为了做到这一点,我需要连接哪个事件?

我注意到,每次重新加载页面时,连接ID都将更改为其他的GUID.至少在Session的整个生命周期中如何设置ConnectionId只能一次?

解决方法

您的方法确实有效,但正确的方法是使用内置的API:Clients.Others.addMessage(message).也不需要在集线器本身内部获取集线器上下文.您可以随时通过Context.ConnectionId访问当前连接ID,或通过Clients.All.foo()发送消息sto客户端.

并且您无法以编程方式设置ConnectinoID.如果您想要跨网页跟踪用户,请维护服务器上的用户列表,然后在连接ID通过网站导航时重新分配连接ID.

这是一个解释用户跟踪的帖子:SignalR 1.0 beta connection factory

猜你在找的C#相关文章