0

クライアントが単純な文字列を送信するTCP接続も取得する可能性のあるサーバーにmochiwebを使用しています(改行なし、文字列はhttpではありません)。Mochiweb は HTTP ソケットを使用するため、これを検出できません ( http_errormochiweb で簡単に取得できることさえわかりません)。どうすればこれを解決できますか? 理想的にはmochiwebのコードを変更したいのですsetopt({packet, http_or_raw})が、そのようなことはありません。これをどのように処理することをお勧めしますか? 私の現在のアイデアは、mochiweb を変更して使用することでしerlang:decode_packetた。より良いアプローチはありますか?

編集:

より詳しい情報。私たちのサーバーは websocket サービスです。ws をサポートするブラウザーを使用していないユーザーが使用できるようにしたいので、ブラウザーが使用できない場合に websocket を実行するために flash オブジェクトを使用します。フラッシュ オブジェクトは、フラッシュ ポリシー ファイルを取得する必要があります。Flash は、ファイルを次の 2 つの場所のいずれかに配置するように強制します。 - ポート 843 (ハード コードされたフラッシュ) - ws サービスのポート フラッシュ プロトコルは HTTP ベースではありません。Amazon ELB では 1024 未満のほとんどのポートのポート転送が許可されていないため、mochiweb (https://github.com/nivertech/mochiweb/tree/ori_flash_170811) へのパッチを介して同じポートにフラッシュ サーバーを実装しました。

何かアドバイス?

4

1 に答える 1

0

mochiweb は、このユース ケースを処理するように設計されていません。HTTP のように見えない場合、接続は閉じられ、破棄されます。この目的のためには、mochiweb_http を回避する必要があります。別のポートを使用するか、HTTP のように見せることをお勧めします。

あなたがやりたいと言っていることを本当にやりたいのなら、mochiweb_http.erlを別の名前(例:something_not_http.erl)にコピーし、loop/2とrequest/2に適切な変更を加えます…そしてmochiweb_httpを追加する代わりにあなたの監督者は時々_not_httpを追加します。mochiweb をインプレースで変更する必要はなく、推奨もされていません。

于 2011-08-18T05:36:39.333 に答える