0

我很难用我非常基本的 Socket-IO 设置来解决这个问题。简而言之,iOS 客户端(运行 Socket.IO-Client-Swift)似乎确信它已成功连接到服务器上的套接字:SocketIOClient 的状态为connected. 但是,在服务器上,该connection事件永远不会被触发。

在运行下面的代码时,iOS 客户端Socket status: connected每隔 15 秒左右会向控制台打印一次,表明它已成功连接到服务器,并且连接保持不变。

但是,在服务器上,似乎永远不会触发“连接”事件。NEW CONNECTION永远不会打印到服务器上的控制台。唯一的控制台输出是Server is running on port 4400...,表明服务器已准备好接受连接。

当尝试通过 Web 浏览器连接到NEW CONNECTION服务器时,会按预期打印到服务器的控制台。看来问题出在iOS代码上。

客户端和服务器的完整代码如下。

客户:

class GMSockets {    
    private var manager: SocketManager = SocketManager(socketURL: URL(string: "ws://localhost:4400")!, config: [.log(false), .compress])
    private var socket: SocketIOClient
    
    init() {        
        self.socket = self.manager.defaultSocket
        self.socket.on(clientEvent: .connect) { (data, ack) in
            print("Socket status: \(self.socket.status)")
            self.socket.emit("testEvent", "Hello")
        }
        self.socket.connect()
    }
    
}

服务器:

let port = 4400;

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(port);
console.log(`Server is running on port ${port}...`);

io.sockets.on("connection", function(socket) {
    console.log("NEW CONNECTION")

    socket.on("testEvent", function(data) { 
        console.log("Test event recieved")
    })
})

我在 iOS 客户端上使用 Socket.IO-Client-Swift 版本 15.2.0,在服务器上使用 Socket.io 版本 3.0.4。

4

1 回答 1

1

Socket.IO-Client-Swift 的文档错误地表明它支持 Socket-io 3.0,但它只支持 2.xx 版本 将 socket.io 降级到 2.3.0(最后一个 2.xx 版本)将解决这个问题。

于 2020-12-22T08:22:38.990 回答