1

PHP と nginx を使用して単純な WebSocket サーバーを実装したいと考えており、次のような印象を受けています。

  1. Websocket がRFC 6455で説明されている「プロトコル スイッチ」を通過すると、標準の (「Web」以外の) ソケット サーバーと通信できます。
  2. nginx のマニュアルによると、 nginxは前述の「プロトコル スイッチ」を実行できます。

これを念頭に置いて、JavaScript クライアント、nginx 構成、および PHP サーバーで構成される次の単純な実装を試しました (以下を参照)。

結果:

  • Connection: upgradePHP サーバーは、Sec-WebSocket-Key: ***および類似のフィールドを含む WebSocket HTTP ヘッダーを受信します。これでいいと思います。
  • ただし、onopenクライアントでイベントがトリガーされることはありません。これが私が立ち往生している場所です。

質問:

  • いくつかの詳細、またはこれがどのように機能するかの概念全体を誤解していますか?
  • コード例を機能させるにはどうすればよいですか?

Javascript クライアント:

function socket() {
 
  var ws = new WebSocket("ws://socket/hello/");
  
  ws.onopen = function() {
    ws.send("Hello, World!");
  };
  
  ws.onmessage = function(event) { 
    console.log(event.data);
  };
  
}

socket();

nginx の構成:

  server {
    location /hello/ {
      proxy_pass http://localhost:10000;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }   
    server_name socket;
    root socket;
  }

PHP サーバー:

( PHP マニュアルの例 #1 で説明されているとおりに実装され、 に変更$addressされただけ127.0.0.1です。)

4

1 に答える 1

2

ただし、ソケット サーバーが websocket プロトコルを実装している場合に限ります。汎用の TCP または UDP ソケットとして使用できるかどうかを尋ねる場合は、使用できません。完全停止。

于 2013-09-14T00:01:44.577 に答える