angular - 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可以满足我的要求?
解决方案
每次调用时设置一个标志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()
}
});
推荐阅读
- react-native - React Native - 未定义不是对象(评估'Items.Length')
- sql - 在计算其用户名的总和后选择帐户
- c# - 带有 MySQL 的 C# 实体框架
- c++ - 为什么允许将 0 或 nullptr 分配给 std::string,即使它导致直接的运行时异常?
- kotlin - Android 单词示例(MVVM、LiveData、Room)+ SearchView + 删除,删除错误的项目
- python - pySpark 检查数据框是否存在
- c# - .Net Core Controller 中的动作函数顺序很重要
- html - Jinja2 字符串变量到 EntryField 的部分字符串
- python - python单元测试中的模拟常量不起作用
- kubernetes - Kubernetes ReadWriteOnce 部署重载/重启时的多连接死锁