私は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
がログに表示されますが、私はどのようにこの問題を解決するために、任意の手掛かりを得ていないのです。