错误 SocketEnginePolling:长轮询请求期间出错

Sha*_*rve 6 sockets websocket ios socket.io swift5

let manager = SocketManager(socketURL: URL(string: "Some url")!, config: [.log(true), .compress])
var socket:SocketIOClient!
var name: String?
var resetAck: SocketAckEmitter?



override func viewDidLoad() {
    super.viewDidLoad()
    
    socket = manager.defaultSocket

    socket.on(clientEvent: .connect) {data, ack in
        print("socket connected")
    }

    self.socket.on(clientEvent: .error) {data, ack in
        print("error")
    }

    self.socket?.on(clientEvent: .disconnect){data, ack in

        print("disconnect")

    }

    socket.connect()
    
    
}
Run Code Online (Sandbox Code Playgroud)

错误 SocketEnginePolling:长轮询请求期间出错

LOG SocketIOClient{/}:处理事件:数据错误:[“错误”]

小智 8

将 pod 更新到 Socket.IO-Client-Swift 16.0.1


Hit*_*tit 3

所以这个问题让我花了 8 个小时的时间进行了相当痛苦的挖掘,以下是我解决这个问题所遵循的步骤。

  1. 检查您是否使用“localhost:PORTNUMBER”作为 URL。相反,请尝试使用ngrok ngrok来使用临时“https” 。

  2. 如果您坚持使用 http,请尝试App Transport Security policy在项目的 info.plist 中禁用

  3. 检查您是否使用兼容的客户端(iOS)和服务器(Node js等)Socket.io版本。您可以在此处查看兼容性表。

    • 一个简单的修复方法是将服务器 Socket.io 版本降至 1.xx
    • 要将服务器 Socket.io 版本保持为 4.xx(撰写本文时的最新版本),请allowEI03: true在实例化服务器时添加选项:
      const io = new Server(httpServer, {
        allowEIO3: true
      });
    
    Run Code Online (Sandbox Code Playgroud)
    • 如果您正在使用 Express 创建服务器,我建议这样做:
      const express = require("app");
      const { createServer } = require("http");
      const { Server } = require("socket.io");
      const app = express();
      const httpServer = createServer(app);
    
      const io = new Server(httpServer, { 
        allowEIO3: true,
      });
    
      io.on("connection", (socket) => {
        // ...
      });
    
      httpServer.listen(3000);
    
    Run Code Online (Sandbox Code Playgroud)