1

私がやろうとしているのは、Netty を使用して Web サーバーを実装し、HDFS への大きなファイルのアップロードを HDFS ファイルとして保存することです。

私の基本的なワークフローは次のとおりです。

  1. エンド ユーザーが HTTP PUT/POST リクエスト (ペイロードは 1GB など) を私の Netty サーバーに送信します。

  2. サーバーは HTTP 接続を受け入れ、メソッド/URI/ヘッダーを解析します

  3. サーバーは DFSClient で HDFS を呼び出し、ファイルを作成してハンドルを取得します (DFSClient.create はブロッキング呼び出しです)。

  4. サーバーは HTTP 要求で残りのアップストリームを受信し、チャンクごとに HDFS ハンドルに書き込みます (各チャンクを HDFS ハンドルに書き込むことはブロッキング コールです)。

  5. サーバーは HDFS ハンドルを閉じ、クライアントに応答を返します (HDFS ハンドルを閉じると呼び出しがブロックされます)

上記の手順を実行する際に問題が発生しています。Netty でブロック呼び出しを効率的に行う (イベント ループ全体をできるだけブロックしない) 最善の方法がわからないためです。

上記のロジックを実装する正しい方法を誰かに教えてもらえますか? よろしくお願いします!

4

1 に答える 1

0

ブロックする必要がある場合は、同じ IO スレッド上の他のチャネルに影響を与えないように、ブロック操作を実行するハンドラーの前に ExecutionHandler を配置する必要があります。

于 2013-01-30T05:47:18.403 に答える