我需要集群socket.IO服务器并希望为所有连接使用相同的端口
为了做到这一点,我创建了快速服务器,配置它,然后告诉socket.IO听这个服务器
if(cluster.isMaster){
var cpuCount = require('os').cpus().length;
for (let i = 0; i < cpuCount; i += 1) {
cluster.fork();
} else {
const credentials = {key: privateKey, cert: certificate};
const app = express();
const httpsServer = https.createServer(credentials, app);
httpsServer.listen(8003);
const io = SocketIO.listen(httpsServer);
}
但这对多台服务器不起作用。当我尝试连接到套接字服务器时,我得到以下消息:
websocket.js?13d9:112 WebSocket connection to 'wss://...' failed: Error during WebSocket handshake: Unexpected response code: 400
但是在服务器端事件监听器on("connection", () => {})
工作
当我渲染应用程序时,我有相同的代码用于创建服务器群集,它工作得很好
当只有一个socket.IO服务器监听此端口时,套接字服务器工作。
如果有方法为群集中的一个端口创建多个socket.IO侦听器?
答案 0 :(得分:2)
终于找到了答案
Socket.io正在执行多个请求以执行握手并与客户端建立连接。对于群集,这些请求可能会到达不同的工作人员,这将破坏握手协议。
所以我决定使用sticky session lib for socket.IO,它完全按照我想要的方式工作