2017-10-20 19 views
2

私はsocket.ioを使用しているiOSアプリケーションを作成しています。シナリオは非常に単純です、人はコマンドを使用してデータを送信するという冒険を予約します。その後、サーバーからの応答を返すためにsocket.onを使用しました。これはいつか完全に動作していましたが、今は問題に直面しています。データがサーバーに到達しておらず、応答も戻っていません。 私はこの問題について調査しました。理解したのは次のとおりです。Socket.io - ソケット接続を維持する(Swift)

ソケットが切断されて動作が停止することがあります。私もデータを送信する前にsocket.reconnectを使用しましたが、うまくいかなかったのです。

node.jsのパラメータがforceNewであることがわかりましたが、すぐに代替手段が見つかりませんでした。ここで

私のコード(socket.ioに関連)である:

override func viewDidLoad() { 
     super.viewDidLoad() 

     socket = AppDelegate.socket 

      self.socket.on("book-adventure-seeker") {[weak self] data, ack in 
       print (data) 
     } 
    } 
    @IBAction func bookAdventureTapped(_ sender: Any) { 

     let jwtToken = UserDefaults.standard.string(forKey: "jwtToken") 

     let data = ["adventure_id": adventureId, "jwt": jwtToken] as [String : Any] 
     self.socket.emit("book-adventure", data) 
    } 

そして、ログは次のとおりです:AppDelegateで

:のViewControllerで

AppDelegate.socket = SocketIOClient(socketURL: URL(string: "######")!, config: [.log(true), .compress]) 
AppDelegate.socket.connect() 

2017-10-20 09:45:04.665 CuufyPrototype[2591:94370] LOG SocketEngine: Writing ws: has data: false 
2017-10-20 09:45:08.541 CuufyPrototype[2591:93618] LOG SocketIOClient: Emitting: 2["book-adventure",{"jwt":"######","adventure_id":"######"}] 
2017-10-20 09:45:08.541 CuufyPrototype[2591:94370] LOG SocketEngine: Sending ws: as type: 2 
SocketIOClientStatus 
2017-10-20 09:45:22.804 CuufyPrototype[2591:94370] LOG SocketEngine: Writing ws: 2["book-adventure",{"jwt":"######","adventure_id":"#####"}] has data: false 
2017-10-20 09:45:22.805 CuufyPrototype[2591:94370] LOG SocketEngine: Sending ws: 2["book-adventure",{"jwt":"#######","adventure_id":"######"}] as type: 4 
2017-10-20 09:45:22.807 CuufyPrototype[2591:94370] LOG SocketEngine: Writing ws: has data: false 
2017-10-20 09:45:22.807 CuufyPrototype[2591:94370] LOG SocketEngine: Sending ws: as type: 2 
2017-10-20 09:45:22.810 CuufyPrototype[2591:93661] ERROR SocketEngine: 
2017-10-20 09:45:22.811 CuufyPrototype[2591:93618] ERROR SocketIOClient: 
2017-10-20 09:45:22.811 CuufyPrototype[2591:93618] LOG SocketIOClient: Handling event: error with data: [""] 
2017-10-20 09:45:22.811 CuufyPrototype[2591:93618] LOG SocketIOClient: Handling event: statusChange with data: [SocketIO.SocketIOClientStatus] 
2017-10-20 09:45:22.812 CuufyPrototype[2591:93618] LOG SocketIOClient: Starting reconnect 
2017-10-20 09:45:22.812 CuufyPrototype[2591:93618] LOG SocketIOClient: Handling event: reconnect with data: [""] 
2017-10-20 09:45:22.812 CuufyPrototype[2591:93618] LOG SocketIOClient: Trying to reconnect 
2017-10-20 09:45:22.812 CuufyPrototype[2591:93618] LOG SocketIOClient: Handling event: reconnectAttempt with data: [-1] 
2017-10-20 09:45:22.812 CuufyPrototype[2591:93618] LOG SocketIOClient: Handling event: statusChange with data: [SocketIO.SocketIOClientStatus] 

でも私は使ってみましたこのようなAppDelegateでsocket.on:(公式ドキュメントからの例のように)

AppDelegate.socket = SocketIOClient(socketURL: URL(string: "#######")!, config: [.log(true), .compress]) 

     AppDelegate.socket.on("book-adventure-seeker") {[weak self] data, ack in 
      print (data) 
     } 
    AppDelegate.socket.connect() 

しかし、それでもまだ、それは私のために動作しませんでした。

更新:発するコマンドの間、は時々、Engine is being closedがログに表示されますが、私はどのようにこの問題を解決するために、任意の手掛かりを得ていないのです。

答えて

0

使用迅速でforceNewため、このコード:

let config : [String: Any] = ["log": true, 
            "compress": true, 
            "forcePolling": true, 
            "forceNew": true] 
    var socketManager = SocketManager(socketURL: url, config: config) 
    var socket: SocketIOClient = socketManager.defaultSocket 
関連する問題