2013-11-03 69 views
5

爲了能夠在使用Socket.IO的RPC功能時發送二進制數據,我認爲我可以在同一臺服務器上同時使用Socket.IO和WS模塊。而不是打開完全獨立的服務器來建立兩個連接,我想知道我是否可以使用相同的HTTP服務器。在Socket.IO和WS之間共享WebSocket連接

對於Socket.IO和WS,是否可以同時使用一個使用http.createServer()創建的服務器?很明顯,我期望從客戶端創建一個Socket.IO連接和一個常規的WebSocket連接。以下代碼在客戶端創建協議錯誤,大概是因爲Socket.IO和WS都試圖處理連接。

var http = require('http'); 
var server = http.createServer(app); 
server.listen(3000); 

// Socket.IO 
var io = require('socket.io').listen(server); 
io.sockets.on('connection', function (socket) { 
    // ... 
} 

// ws 
var WebSocketServer = require('ws').Server 
var wss = new WebSocketServer({server: server}); 
wss.on('connection', function (ws) { 
    // ... 
} 

回答

3

由於2016年我簡直分配的WebSocket模塊WS的路徑

var wss = new WebSocketServer({ server: server, path: '/ws' }); //do not interfere with socket.io 

無需改變socket.io側都

5

事實證明,這是可能的一些配置。訣竅是告訴Socket.IO不要銷燬nonSocket.IO WebSocket連接請求,然後將Socket.IO和WS放在不同的路徑上。這裏有一些混亂的示例代碼,但它在重新使用Socket.IO會話ID進行輔助連接時起作用。

var server = http.createServer(app); 
server.listen(3000); 

var WebSocketServer = require('ws').Server 
var io = require('socket.io').listen(server); 

io.set('destroy upgrade', false); 
io.set('transports', ['websocket']); 

io.sockets.on('connection', function (socket) { 
    var wss = new WebSocketServer({ 
     server: server, 
     path: '/anythingYouWant/' + socket.id 
    }); 
    wss.on('connection', function(ws) { 
     ws.on('message', function(message) { 
      console.log(message); 
     }); 
    }); 
}); 
相關問題