2016-12-18 14 views
1

ソケットに接続しようとしています。アプリケーションを起動または終了するときに接続が接続されていることを確認できますが、いつでもエラーが表示されます。Swift SocketIOクライアントが接続を保持していません

SocketIOClient:処理中のイベント:[接続されていないときに試して発光します] ]

端末に接続されていると表示されている場合、私のアプリが接続を認識しないのはなぜですか?

私は、ラチェットをPHPソケットサーバとして使用しています。

class SocketIOManager: NSObject { 
    var socket: SocketIOClient? 
    override init() { 
     super.init() 
     self.socket = SocketIOClient(socketURL: URL(string: "http://166.62.121.191:8495")!, config: [.log(true), .reconnects(true), .reconnectWait(10), .forcePolling(true), .forceWebsockets(true)]) 
    } 

    static let instance = SocketIOManager() 

    func establishConnection() { 
     socket?.onAny { (event: SocketAnyEvent) -> Void in 
      print("Got event: \(event.event), with items: \(event.items)") 
     } 
     socket?.on("connect") { (data, ack) in 
      print(data) 
     } 
     socket?.connect() 
    } 

    func closeConnection() { 
     socket?.disconnect() 
    } 
} 

答えて

1

これはバックエンドと関係がある可能性があります。 私が取り組んでいるのは、クライアントが10秒ごとに 'keep alive'メッセージを送信する必要があるか、そうでなければ接続を終了させることです。

func keepAlive(){ 
     let socketData = [Key.type: "serviceAlive"] as [String : Any] 
     socket.emit("message", socketData) 
    } 

socket.ioは、定期的にクライアントとサーバの間でパケットを送信するには、ping /ピンポン方式を採用しています:私がしなければならなかった何

は、次のようになります簡単なメッセージをNSTimerを作成し、放出されます。その定期的な送信が中断された場合、クライアントまたはサーバは、もう一方の端末がもはや接続されていないことを認識します。この動作はすでにsocket.ioに組み込まれています。