gpt4 book ai didi

javascript - 重新连接时客户端 SignalR 未收到消息

转载 作者:行者123 更新时间:2023-11-27 23:26:10 26 4
gpt4 key购买 nike

我在作为服务运行的服务器上运行 SignalR Hub。无论出于何种原因,该服务器可能会因断电、更新(我们使用八达通自动更新)或其他原因而停止。

如果我有连接到此服务的用户向服务器发送消息,然后依次将此消息转发到传感器。然后,传感器向服务器返回一条消息,并转发到客户端 Web 应用程序。

这在第一次连接时工作正常。如果服务在重新连接超时之前停止并重新启动,我将使用相同的连接 ID 重新连接,并且可以发送消息。但是我无法接收消息。

如果我刷新页面,我会得到它们,因为这会创建一个新连接。无论是 OnConnect() 还是 OnReconnect(),都会调用相同的代码。

示例

public override Task OnConnected()
{
EstablishConnection("Connect");
return base.OnConnected();
}

public override Task OnReconnected()
{
// Remove old Connection Id to receive messages on reconnect
ConnectionsHandler.Instance.RemoveTerminalClient(Context.ConnectionId);

EstablishConnection("Reconnect");

// This block is to tell the user that connection has been reconnected. This message shows on the webapp so connection has been restored.
var hubContext = GlobalHost.ConnectionManager.GetHubContext<TerminalHub>();
var message = TerminalMessageColorer.ColorMessageLime(String.Format("Connection has been re-established!"));
hubContext.Clients.Client(Context.ConnectionId).TerminalEcho(message);

return base.OnReconnected();
}

private void EstablishConnection(string conType)
{
ConnectionsHandler.Instance.AddTerminalClient(Context.ConnectionId, "null");
var terminal = ConnectionsHandler.Instance.GetTerminalClient(Context.ConnectionId);
#if DEBUG
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("{0}\t{1}\t...{2}", terminal, Context.ConnectionId, conType);
#endif
}

最佳答案

我发现问题所在了。我需要在客户端代码中包装 $timeout ,因为 C# 代码中似乎有一点延迟。当我调试初始化程序时,我从 chrome 开发工具中偶然发现了这一点,认为一定是出了问题,导致用户 ID 没有被传递。一旦我在调用初始化时添加了断点,它就会转到那里以便工作,但从那里继续我会收到消息。如果没有断点我就不会。因此,我在调用周围添加了 $timeout

$timeout(function () {
initializeTerminal();
}, 100);

关于javascript - 重新连接时客户端 SignalR 未收到消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948513/

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