6

ここでの最初の投稿は、できるだけ興味深いものにするように努めます。

最近、共有ホスティング サーバーで WebSocket リクエストを処理する可能性に興味を持っています。

「プランをアップグレードしてください」と言わないでください。これはすべて、少なくとも VPS では些細なことです。気付いた。

多くの人が知っているように、共有ホストは...

  • デーモンを見つけたら殺す
  • サーバーソケットの使用をブロックする
  • シェル アクセスを拒否する
  • apache を制限しない (モジュールのインストールなし)

これらの制限により、phpwebsocket と python が完全に排除されます。Web ページを装うノーデーモン ソリューションが必要です。

PHP は私のお気に入りのサーバー側言語であり、Web ページを装った PHP Websocket ゲートウェイを作成しました。

これまでのところ、(出力バッファリングを使用して) ハンドシェイクとストリーミング出力の正しいヘッダーを送信することに成功していますが、最初の要求の後にデータを読み続ける方法がまだわかりません。

要するに、PHP スクリプトが開始された後もクライアントからデータを受信し続けたいということです。php://input 疑似ファイルを読み取ろうとしましたが、GET の終了後、それ以上読み取ることができないようです。これを可能にする設定やハックはありますか?

ありがとう!

4

3 に答える 3

5

短いバージョン: あなたがやろうとしていることは単に不可能です.

長いバージョン: あなたが得ることができる最高のものは、ブラウザーで websocket 接続のように見えるが、一方向でしか機能しない一方向の通信チャネルです。サーバーからブラウザへ。Web サーバーは、HTTP 以外のプロトコルを使用しようとしていることを認識せず、それを伝える方法がないため、他の方向は単純に機能しません。少なくとも、今概説したシナリオではそうではありません。

于 2012-11-01T17:51:38.370 に答える
1

Your problem here is Apache itself. Once Apache has read the first HTTP request (the websocket handshake) it will continue reading from the TCP connection for any additional HTTP requests. Thus any new data send on the TCP connection will never be passed on to your script. This is necessary as the HTTP/1.1 protocol supports Keep-Alive by default meaning multiple Request/Response cycles are done on one TCP connection. The browser doesn't open a HTTP connection for each request (which was the default in HTTP/1.0). You can't change this behavior. To implement a websocket server you will need to setup your own socket.

于 2012-11-01T15:20:23.677 に答える
0

WebSocket ハンドシェイクが完了すると、通常のソケットとほとんど同じように機能します。Apache がヘッダーなしで単方向通信を許可する理由はありません。

于 2012-04-28T07:12:04.657 に答える