2017-10-20 189 views
2

我正在使用socket.io的iOS应用程序。该场景非常简单,一个人预订冒险,即发送数据使用发出命令。之后,我使用了socket.on以便从服务器获得响应。这在一段时间内工作完美,但现在我面临着问题。数据无法到达服务器,也没有回应。 我搜索了关于这个问题,我得到的理解是:Socket.io - 维护套接字连接(Swift)

有一点在断开连接,因此它停止工作。我甚至在发送数据之前使用了socket.reconnect,但它不起作用。

我找到了node.js的forceNew的一个参数,但是在swift中没有找到任何替代方法。

这里是我的代码(以socket.io相关):

在AppDelegate中:

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

在视图控制器:

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) 
    } 

和日志是:

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] 

即使我试图使用socket.on在AppDelegate的是这样的:(为例,从官方文档中)

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