我很难用我非常基本的 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。