我正在尝试为它们设置一些 SignalR 集线器和一些单独的 OnDisconnected 事件。
为了这个问题,在某些页面上我有两个集线器:
StatusHub:处理用户在网站上的状态。在网站的每个页面上都会调用该中心的方法,并在用户浏览网站时处理用户连接和断开连接的逻辑以更新用户状态。
ChatHub:处理与网站实时聊天相关的一切。当用户单击特定按钮时,仅从网站的特定页面调用此集线器的方法。
我遇到的问题是,即使两个集线器类都实现了自己的 OnConnected 和 OnDisconnected 方法版本,但只有 StatusHub 方法被触发,ChatHub 方法没有被调用。
我不知道这是设计使然,还是我做错了什么。到目前为止,我已经阅读了一些文章和答案,指出与集线器服务器的连接是单个连接,并且我没有连接到特定的集线器,我作为一个整体连接到集线器服务器,因此只有一种方法将永远被识别和调用。
任何对 SignalR 有更多经验的人可以告诉我是否有办法将两个集线器的连接和断开事件分开,或者是否真的是这样?
我将在下面放一些代码以更好地说明该场景,但如果您需要查看更多代码,请询问,我会添加它。
状态中心.cs
public class StatusHub : Hub {
public override Task OnDisconnected()
{
//handles the disconnected event as needed
return base.OnDisconnected();
}
public override Task OnConnected()
{
//handles the connected event as needed
return base.OnConnected();
}
}
聊天中心.cs
public class ChatHub : Hub {
public override Task OnDisconnected()
{
//should handle the chat disconnected event but is never reached
return base.OnDisconnected();
}
public override Task OnConnected()
{
//should handle the chat connected event but is never reached
return base.OnConnected();
}
}
启动中心服务器连接的代码(在每个页面上执行):
$.connection.hub.start().done(function() {
//a lot of code here (irrelevant to the question I think)
});