gpt4 book ai didi

c# - 在 SignalR 中向除自身以外的所有客户端广播消息

转载 作者:IT王子 更新时间:2023-10-29 04:30:45 24 4
gpt4 key购买 nike

我意识到这些问题很相似:

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);

每次建立连接时,我都会在客户端的 cookie 中设置 ConnectionID:

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

所以我的问题是:

  1. 在这种情况下,这是我可以采用的最佳/唯一方法吗?我可以从其他地方读取发起请求的客户端的连接 ID,例如 hub.Context.ConnectionID 或类似于从 HttpContext 获取 SessionID 的方式。当前.Session.SessionID?

  2. 例如,当客户端连接时,我可以通过将连接 ID 设置为 SessionID 来以编程方式设置连接 ID 吗?这会因为某种原因导致问题吗?如果是这样,您能否解释一下如何以编程方式设置连接 ID,以及我需要连接到哪个事件才能执行此操作?

我注意到每次重新加载页面时,连接 ID 都会更改为不同的 GUID。如何仅设置一次 ConnectionId 并至少在 Session 的生命周期内维护它?

最佳答案

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

并且您不能以编程方式设置 ConnectinoID。如果您想跨页面跟踪用户,请在您的服务器上维护一个用户列表,然后在他们浏览网站时重新分配连接 ID。

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

关于c# - 在 SignalR 中向除自身以外的所有客户端广播消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com