Cordova:保持socket.io连接活

时间:2015-06-17 21:24:44

标签: angularjs cordova socket.io ionic-framework

我目前正在开发一个带有Ionic Framework的Apache Cordova应用程序,它应该通过WebSocket与我的服务器进行通信,并使用Socket.Io库。现在我面临两个问题:

  1. 当应用程序进入后台(cordova pause事件)时,例如通过家庭或待机按钮,一段时间后,套接字将关闭&客户端断开连接。

  2. 当我通过Android设备上的硬件后退按钮退出应用程序时,套接字甚至会立即关闭。

  3. 到目前为止我尝试过:

      socket.io.reconnect()事件触发时
    • socket.io.connect()disconnect

    • $destroy上的$scope事件发生时(Ionic在AngularJS上工作)

    基本上我只想在用户启动应用程序之后保持WebSocket连接处于活动状态,直到通过任务管理器或类似工具手动终止它为止。

    我已经彻底搜索了这里的每一个相关问题,但它们不适合我的情况。我真的需要这个东西来工作,并希望得到任何帮助。

2 个答案:

答案 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");
    }