我意识到这些问题是相似的:
但是,它们很旧,当前文档中的任何内容都没有给我任何关于我是否在做正确的事情的线索。
这是问题/问题:
我需要能够从服务器端向所有连接的客户端广播一条消息,除了提交 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);
});
所以我的问题是:
这是我在这种情况下可以采取的最好/唯一的方法吗?我可以读取从其他地方发出请求的客户端的连接 ID,
hub.Context.ConnectionID
或者类似于您SessionID
从 HttpContext.Current.Session.SessionID 获取的方式吗?例如,当客户端连接时,我可以通过将连接 ID 设置为 SessionID 来以编程方式设置连接 ID 吗?由于某种原因,这会导致问题吗?如果是这样,您能否解释一下如何以编程方式设置连接 ID 以及我需要连接到哪个事件才能做到这一点?
我注意到每次重新加载页面时,连接 ID 都会更改为不同的 guid。如何只设置一次 ConnectionId 并至少在 Session 的生命周期内维护它?