5

我们正在尝试在低带宽环境中使用 SignalR,在该环境中与后端服务器的连接可以随机进出,并且我们希望我们的 Web 应用程序能够做出适当的响应。

看起来这个连接 API 在过去一年中一直在变化,但根据最新的文档,我尝试连接到 $.connection.hub.stateChanged 以检测连接状态的变化,我得到了一些点击启动时客户端从断开连接 -> 连接 -> 连接,但是当我停止服务器时,事件处理程序不会触发,当我再次启动服务器时,实时消息传递不再起作用。

为了测试这个场景,我在 Windows 7 上运行 IIS 中的 ASP.NET Web 服务器,Web 客户端在 Google Chrome 中运行。一旦站点运行并交换消息,我在 IIS 中终止该网站,消息停止但客户端没有收到任何通知。

这是一个快速片段(使用 TypeScript):

$.connection.hub.stateChanged((change) => {
   console.log("state changed...");
   console.log(change);

   if (change.newState === $.signalR.connectionState.reconnecting) {
      this.raise('action:disconnected');
   }
   else if (change.newState === $.signalR.connectionState.connected) {
      this.raise('action:connected');
   }
});

任何指导将不胜感激,谢谢!

-杰里米

4

1 回答 1

5

您使用的是什么版本的 SignalR?在最新的(和之前的)中,立即检测到服务器离线,并使用重新连接标志引发状态更改。

要杀死服务器,我假设您的意思是关闭 IIS。例如 iisreset。在 inetmgr 中停止网站不会关闭网站,它只是删除该端口的 Http.sys 绑定。有关更多信息,请参阅https://github.com/SignalR/SignalR/issues/1148

如果要模拟服务器宕机,请杀死 w3wp。

于 2013-01-26T19:16:33.647 回答