3

私は現在Websocketを使用しています。

einaros / ws(およびその他も)のようないくつかのアクティブなプロジェクト/実装を確認したところ、それらが独自にサーバーを実装していることがわかりました。tcpサーバーを提供するノードネットモジュールを使用する代わりに。このアプローチの理由はありますか?

https://github.com/einaros/ws/blob/master/lib/WebSocketServer.js

よろしく

アップデート:

var server = net.createServer(function(c) {

  c.on('data', function(data) {
    // data is a websocket fragment which has to get parsed
  });
  // transformToSingleUtfFragment is building a websocket valid
  // byte fragment which contains hello as application payload
  // and sets the right flags so the receiver knows we have a single text fragment
  c.write(transformToSingleUtfFragment('hello'));
  c.pipe(c);
});
server.listen(8124, function() { //'listening' listener
  console.log('server bound');
});
4

1 に答える 1

7

WebSocketのaaプロトコルは、通常のHTTPの上に階層化されています。

基本的に、ブラウザはUPGRADEHTTPリクエストを送信し、HTTP 1.1のキープアライブ機能を利用して、HTTP接続の基盤となるTCPソケットを開いたままにします。

次に、データはWebSocketプロトコル(リンクの背後にあるかなり大きなRFC)を介して送信されます。WebSocketプロトコル自体はTCP上に構築されています。

HTTP部分が必要であり、そこからTCP接続を再利用する必要があるため、の代わりに通常のHTTPサーバーを使用するのが理にかなっていますnet.Server。それ以外の場合は、HTTP処理部分を自分で実装する必要がありました。

どちらの場合もWebSocketプロトコルの実装を行う必要があります。また、任意のHTTP接続をアップグレードできるため、理論的には、WebSocket「サーバー」をポート80の通常のHTTPサーバーに接続するだけで、通常のHTTPリクエストと同じポート上のWebSocket。

于 2013-01-05T14:42:15.603 に答える