2017-06-29 48 views
1

我需要羣集socket.IO服務器並希望對所有連接使用相同的端口
爲了做到這一點,我創建了express server,配置它然後告訴socket.IO來聽這個服務器同一端口上的套接字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); 
} 

但是這不適用於多個服務器。當我試圖連接到socket服務器,我得到以下信息:
websocket.js?13d9:112 WebSocket connection to 'wss://...' failed: Error during WebSocket handshake: Unexpected response code: 400

但在服務器端事件偵聽器on("connection",() => {})作品。
我有相同的代碼來創建服務器羣集時,我呈現應用程序,它工作得很好。
只有一個socket.IO服務器監聽此端口時,套接字服務器才能正常工作。

如果有一種方法可以爲集羣中的一個端口創建多個socket.IO監聽器?

回答

1

終於找到了答案

Socket.io做多個請求進行握手,並建立與客戶端連接。對於羣集,這些請求可能會到達不同的工作人員,這將破壞握手協議。

所以我決定用sticky session lib中socket.IO和它的工作原理完全一樣,我想