我目前正在开发一个带有Ionic Framework的Apache Cordova应用程序,它应该通过WebSocket与我的服务器进行通信,并使用Socket.Io库。现在我面临两个问题:
当应用程序进入后台(cordova pause
事件)时,例如通过家庭或待机按钮,一段时间后,套接字将关闭&客户端断开连接。
当我通过Android设备上的硬件后退按钮退出应用程序时,套接字甚至会立即关闭。
到目前为止我尝试过:
socket.io.reconnect()
事件触发时 socket.io.connect()
或disconnect
当$destroy
上的$scope
事件发生时(Ionic在AngularJS上工作)
基本上我只想在用户启动应用程序之后保持WebSocket连接处于活动状态,直到通过任务管理器或类似工具手动终止它为止。
我已经彻底搜索了这里的每一个相关问题,但它们不适合我的情况。我真的需要这个东西来工作,并希望得到任何帮助。
答案 0 :(得分:0)
您应该使用signalr而不是websocket,并在您的应用中使用JavaScript禁用硬件后退按钮。然后,连接应该能够在你的情况下保持活力1& 2。
Signalr也可以使用Websocket,但实际上你不需要选择它,因为signalr会为你选择最好的协议。
答案 1 :(得分:0)
一旦Websocket关闭,它将被销毁。这样您就无法进行回叫功能来通知websocket关闭事件或无法从任何地方进行连接。
所以,我写了 reconnectSocket 并从另一个服务部门打电话。
在另一个类的频率中调用此 reconnectSocket 。 (我要求每隔 5秒间隔)。如果连接已关闭,则会尝试连接。
private subject: WebSocket;
reconnectSocket() {
console.log('reconnecting socket call');
if (this.subject.readyState == 3) {// If webs-socket closed
this.subject.close();
let ws = new WebSocket(CHAT_URL);
let self = this;
ws.onmessage = function (event) {
self.listener(event.data);
};
ws.onerror = this.onError;
ws.onclose = this.onClose;
ws.onopen = this.onOpen;
this.subject = ws;
console.log("websocket reconnected");
}