2012-04-25 24 views
6

私はここに私の最初の投稿をできるだけ面白くしようとします。デーモンのないWebSocketサーバーですか?

最近私は共有ホスティングサーバーでWebSocketリクエストを処理する可能性に興味がありました。

"あなたの計画をアップグレード"しないでください。これらのことは、少なくとも1つのVPSでは些細なことです。把握した。彼らは、サーバーソケットの1つの

  • ブロックの使用状況を見るかのように多くの人が知っている

    は、共有ホストは...

    • はあなたがアクセス
    • (立ち入り禁止のapacheキープシェル拒否デーモンを終了します

    これらの制限は、phpwebsocket、pythonを完全に排除します。 Webページを装うノーデーモンの解決策が必要です。

    PHPは私のお気に入りのサーバー側の言語です。私はWebページとしてポーズをとるPHP websocketゲートウェイを作りました。

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

    要するに、PHPスクリプトの起動後もクライアントからのデータ受信を継続したいと考えています。私はphp://入力擬似ファイルを読もうとしましたが、GETの終了後にそれ以上の読み込みができないようです。これを可能にする設定やハックはありますか?

    ありがとうございます!

  • +0

    デーモンがない場合、websocketのトラフィックを正確に処理するものは何ですか?これはせいぜい欲求不満のためのレシピのように思えます... – sarnold

    +0

    Apacheはデーモンです。 WebSocketの接続が来たら、私のPHPスクリプトを呼び出します。 – user1354999

    +0

    Apacheは実行に時間がかかりすぎているスクリプトをうまく利用します。あなたは3分から5分程度の間働いても問題ありませんか? – sarnold

    答えて

    0

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

    0

    ここでの問題はApache自体です。 Apacheが最初のHTTPリクエスト(WebSocketハンドシェイク)を読み込むと、TCP接続から追加のHTTPリクエストを読み込み続けます。したがって、TCP接続で送信される新しいデータは、決してスクリプトに渡されません。これは、HTTP/1.1プロトコルがデフォルトでKeep-Aliveをサポートしているため、1つのTCP接続で複数のRequest/Responseサイクルが実行されるため必要です。ブラウザは各リクエスト(HTTP/1.0ではデフォルト)でHTTP接続を開きません。この動作を変更することはできません。 websocketサーバーを実装するには、独自のソケットをセットアップする必要があります。

    5

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

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

    関連する問題