2013-11-03 20 views
5

Socket.IOのRPC機能を利用してバイナリデータを送信できるように、Socket.IOとWSの両方のモジュールを同じサーバー上で使用できると考えました。両方の接続を行うために完全に別々のサーバーを開くのではなく、私は同じHTTPサーバーを利用できるかどうか疑問に思っています。Socket.IOとWSのWebSocket接続の共有

http.createServer()で作成されたサーバーは、Socket.IOとWSの両方で同時に使用できますか?明確にするために、私はクライアントから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

Iは、単にパス

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

WS全て

でsocket.io側を変更する必要がWebSocketのモジュールを割り当てることができませんでした
5

これはいくつかの設定で可能であることが判明しました。このトリックは、Socket.IOにnonSocket.IO WebSocket接続要求を破棄しないように指示し、Socket.IOとWSを別々のパスに入れることです。ここにいくつかの面倒なサンプルコードがありますが、セカンダリ接続のSocket.IOセッションIDを再利用しながら動作します。 2016として

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); 
     }); 
    }); 
}); 
関連する問題