2010-12-11 11 views
0

私はPythonのBaseHTTPRequestHandlerクラスを使ってWebサーバーを構築しています。 WebSocketsのエンドポイントを追加したい。これは、ハンドラのrfileから利用可能なものを読み込む必要があることを意味します。つまり、while入力を読み込むのではなく、受け取ったときにメッセージを1つずつ処理できます。Python、BaseHTTPRequestHandler:ソケットからファイルにあるものを読み取る方法は?

私はさまざまな組み合わせの 'read'を使用しようとしました(例えば、大きなバッファを使って、より少ないデータでより早いデータを返すと思っていましたが、パラメータはありませんでしたが、 )これを動作させることができませんでした。

私は2つの解決策を考えることができます:

  • は、(1)読んで呼び出すには:1でバイト1を読み取ること。バッファリングのセマンティクスが何であるかわからないので、私はむしろこれをやろうと思っています(例えば、私はバイトごとにシステムコールを読んではいけません)。

  • 一時的にファイルを非ブロックにするには、データのチャンクの読み取りを試み、ブロックしてから1バイトの読み取りを試みます。これはむしろ面倒なようです。私が考えることのできる別のオプションは、ノンブロッキングソケットだけを使用することですが、これは現在のスレッドフレームワークでうまく動作しないようです。

どのようなデータを取得するにはどのような情報を取得するためのアイデアはありますか?

答えて

1

WebSocketはHTTPではないため、HTTP要求ハンドラで実際に処理することはできません。

ただし、HTTPでBaseHTTPRequestHandlerを使用すると、通常、Content-lengthヘッダーに指定されている正確なデータ量だけが読み取られます。

関連する問題