Javascript 多个WebSocket的问题(随着时间的推移)
TLDR:我的WebSocket在一段时间后停止连接,尽管它们一开始工作得很好。我怎么修理它 我有一个C#web服务,它使用两个websocket(通过websocket sharp)。它们的定义如下:Javascript 多个WebSocket的问题(随着时间的推移),javascript,c#,angularjs,websocket,websocket-sharp,Javascript,C#,Angularjs,Websocket,Websocket Sharp,TLDR:我的WebSocket在一段时间后停止连接,尽管它们一开始工作得很好。我怎么修理它 我有一个C#web服务,它使用两个websocket(通过websocket sharp)。它们的定义如下: public WebSocketServer sock1= new WebSocketServer("ws://localhost:802"); sock1.Log.Level = WebSocketSharp.LogLevel.Error; sock1.
public WebSocketServer sock1= new WebSocketServer("ws://localhost:802");
sock1.Log.Level = WebSocketSharp.LogLevel.Error;
sock1.Log.File = "LOG\\logfile.LOG";
sock1.AddWebSocketService<StatusWebSocket1>("/");
sock1.KeepClean = false;
sock1.Start();
public WebSocketServer sock2= new WebSocketServer("ws://localhost:803");
sock2.Log.Level = WebSocketSharp.LogLevel.Error;
sock2.Log.File = "LOG\\logfile.LOG";
sock2.AddWebSocketService<StatusWebSocket2>("/");
sock2.KeepClean = false;
sock2.Start();
以及其他地方:
var socket2 = null;
var startStopPolling2 = function(action){
if(action == 'close'){
socket2.close(3001, 'App closing.');
return;
}
var path2 = 'ws://' + window.location.hostname + ':803/';
socket2 = new WebSocket(path2);
socket2.onerror = function(event){
console.log('SOCKET ERROR', event);
$timeout(startStopPolling2, 1000);
};
socket2.onopen = function(){
var selfInfo = {
mode: 'status2',
type: 'ClientRegistration'
};
socket2.send(JSON.stringify(selfInfo));
socket2.onmessage = function(event){
var data = JSON.parse(event.data);
console.log('status2', data.status2);
if(data.status2 == "Closed"){
$state.go("status");
}
};
};
};
startStopPolling2();
$rootScope.$on('$destroy', function(){
startStopPolling2('close');
});
应用程序主要位于一个页面上。(大多数情况下,我们都会显示一个状态页面,但允许用户导航到其他位置来执行管理配置之类的操作。)当我们从status2套接字(socket2
)接收到某个状态值时,我们希望执行一些操作,因此我们必须始终跟踪这些操作。另一个套接字仅在该页面上相关,因此我们希望在不需要它时将其丢弃
问题是:该应用程序通过调用
location.reload(true)
定期刷新页面。如果它一开始工作得很好,那么经过这么多次刷新后,插座不再连接。控制台中没有错误,也没有触发onOpen()
函数发生了什么,我如何修复它?不应该socket2
使用path2
?@emed是的,输入错误。谢谢不应该socket2
使用path2
?@emed是,输入错误。谢谢
var socket2 = null;
var startStopPolling2 = function(action){
if(action == 'close'){
socket2.close(3001, 'App closing.');
return;
}
var path2 = 'ws://' + window.location.hostname + ':803/';
socket2 = new WebSocket(path2);
socket2.onerror = function(event){
console.log('SOCKET ERROR', event);
$timeout(startStopPolling2, 1000);
};
socket2.onopen = function(){
var selfInfo = {
mode: 'status2',
type: 'ClientRegistration'
};
socket2.send(JSON.stringify(selfInfo));
socket2.onmessage = function(event){
var data = JSON.parse(event.data);
console.log('status2', data.status2);
if(data.status2 == "Closed"){
$state.go("status");
}
};
};
};
startStopPolling2();
$rootScope.$on('$destroy', function(){
startStopPolling2('close');
});