首页 > 解决方案 > Signalr:如何直接停止/关闭一个连接而不经过重新连接过程

问题描述

在我的 Angular 项目中,我使用 Signalr 获取实时数据,如下所示:

var connection = $.hubConnection();
var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
contosoChatHubProxy.on('addContosoChatMessageToPage', function(userName, message) {
    console.log(userName + ' ' + message);
});
connection.start()
    .done(function(){ console.log('Now connected, connection ID=' + connection.id); })
    .fail(function(){ console.log('Could not connect'); });

connection.stateChanged((state: SignalR.StateChanged) => {
  if (state.newState === ConnectionState.Disconnected) {
      connection.start()
  }
});

上面的代码与我的代码不是 100% 相同。但是逻辑是一样的,开始连接,重新连接逻辑也一样。

在我的项目中,根据某些情况我需要重置连接,这意味着我需要关闭现有连接并启动一个新连接。

我试过connection.stop()了,但是由于这里有重新连接的逻辑,所以连接会先变成断开状态,然后再自动重新启动。

SignalR客户端是否有其他API可以满足我的要求?

标签: angularsignalr

解决方案


每次调用时设置一个标志connection.stop()

让我们称之为manually_stopped

并在您的stateChanged处理程序中添加一个检查manually_stopped

无论您在哪里打电话connection.stop(),请执行以下操作:

fucntion_to_close_connection(){
  manually_stopped = 1
  connection.stop()
}
connection.stateChanged((state: SignalR.StateChanged) => {
  if (state.newState === ConnectionState.Disconnected && manually_stopped == 0) {
      connection.start()
  }
});

推荐阅读