gpt4 book ai didi

c# - 多个集线器的 SignalR 分离事件

转载 作者:行者123 更新时间:2023-11-30 17:02:23 24 4
gpt4 key购买 nike

我正在尝试为它们设置一些 SignalR 集线器和一些单独的 OnDisconnected 事件。

为了这个问题,在某些页面上我有两个集线器:

  1. StatusHub:处理网站上的用户状态。该中心的方法会在网站的每个页面上调用,并处理用户连接和断开连接的逻辑,以便在用户浏览网站时更新用户状态。

  2. ChatHub:处理与网站实时聊天相关的一切。只有当用户点击特定按钮时,该中心的方法才会从网站的特定页面调用。

我遇到的问题是,即使两个中心类都实现了它们自己版本的 OnConnected 和 OnDisconnected 方法,但只有 StatusHub 方法被触发,ChatHub 方法没有被调用。

我不知道这是设计使然,还是我做错了什么。到目前为止,我已经阅读了一些文章和答案,指出与集线器服务器的连接是单个连接并且我没有连接到特定的集线器,我连接到集线器服务器作为一个整体,所以只有一种方法将永远被认可和召唤。

任何对 SignalR 有更多经验的人都可以告诉我是否有一种方法可以分离两个集线器的连接和断开事件,或者这是否真的意味着这种方式?

我将在下面放置一些代码以更好地说明该场景,但如果您需要查看更多代码,请询问,我会添加。

StatusHub.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)
});

最佳答案

你解决了吗?您所描述的内容似乎很像没有为 ChatHub 注册任何客户端方法的问题。当没有注册客户端方法时,客户端可以调用服务器上的集线器方法,并会得到结果(非常类似于无状态协议(protocol)的请求-响应性质),但是由于服务器无法调用任何东西客户端没有被请求提供响应(通过客户端调用 hub 方法),这种连接是设计的,不会触发 OnConnectedOnReconnectedOnDisconnected 重载。

解决方案相当简单,注册一个像这样的无操作客户端方法就足够了:

$(function()
{
// A no-op client method so the hub's
// OnConnected, OnReconnected and OnDisconnected method overloads are triggered.
$.connection.chatHub.client.noop = function () { };
$.connection.hub.start()
.done(function() { console.log("SignalR connection is up and running."); })
.fail(function(error) { console.log(error); });
});

我不知道其中的确切原因,但是通常用于跟踪连接的客户端并可能将它们与抽象相关联的重载(SignalR 组无法提供,因为它们不可枚举)是相当对于您无法反驳的联系毫无用处,所以这是我必须以这种方式完成的两分钱。

关于c# - 多个集线器的 SignalR 分离事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19913395/

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