問題タブ [netty]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JavaとNettyを使用したチャットサーバー
JavaとNettyを使用してチャットサーバーを実装したいと思います。私の質問は、Nettyの接続ハンドラーですべての作業を行う必要があるかどうかです。「すべての作業」とは、たとえば、ログインを実行し(mysql接続を使用して)、最終的にメッセージを送信し、情報をログに記録することを意味します。
java - Netty + ProtoBuffer: 1 つの接続に対するいくつかの通信メッセージ
Netty のチュートリアルを読んでいるときに、 Netty とGoogle Protocol Buffersを統合する方法の簡単な説明を見つけました。私はその例の調査を開始し (ドキュメントにこれ以上の情報がないため)、現地時間アプリケーションの例のような単純なアプリケーションを作成しました。ただし、この例では PipeFactory クラスで静的初期化を使用しています。
(行を見てください)そして、(私が理解しているように)クラス、つまりメソッドp.addLast("protobufDecoder", new ProtobufDecoder(Communication.DataMessage.getDefaultInstance()));
用に作成できるファクトリは1つだけです。したがって、この状況では、1つのメッセージを使用し てサーバーに送信し、1つのメッセージをサーバーから受信することができますが、それは私にとって悪いことであり、私だけではないと思います:( ? おそらく、このようないくつかを作成できますClientBootstrap
bootstrap.setPipelineFactory()
protobufDecoder
または他の技術?どうもありがとう。
java - Nettyに似たC++ネットワークライブラリ
JBossのNettyに似たC++ネットワークライブラリはありますか?プロトコルハンドラーをリストに追加し、ネットワークパケットをオブジェクトとして処理できるアーキテクチャが必要です。
sockets - Netty 同時実行と「ピアによる接続のリセット」
次の単純なサーバーを構築し、ab
. ab
合計 3000 件のリクエスト (300 件の同時実行)を実行すると、機能します。もう一度実行すると、次のように表示されます。
このエラーの後、サーバーを再起動せずにcurlで単一のリクエストを作成しようとすると、機能します。もう一度実行するab
と、同じエラーが表示されます。あまりにも多くの同時接続を処理できないようです。コードの下:
ハンドラーは次のとおりです。
ご覧のとおり、これは非常に単純で、処理されたリクエストの総数を表示するだけです。任意のヒント?
ありがとう
java - 多くのクライアント接続がある場合、Netty スレッド モデルはどのように機能しますか?
今後のプロジェクトで Netty を使用する予定です。このプロジェクトは、クライアントとサーバーの両方として機能します。特に、独自のクライアントにサービスを提供しながら、さまざまなサーバーへの多くの接続を確立および維持します。
現在、NioServerSocketChannelFactoryのドキュメントでは、サーバー側のスレッド モデルがかなり適切に指定されています。バインドされたリッスン ポートごとにプロセス全体で専用の Bossスレッドが必要になりますが、接続されたクライアントはワーカースレッドでノンブロッキング方式で処理されます。具体的には、1 つのワーカー スレッドが複数の接続されたクライアントを処理できるようになります。
ただし、NioClientSocketChannelFactoryのドキュメントはあまり具体的ではありません。これも、ボススレッドとワーカースレッドの両方を利用しているようです。ただし、ドキュメントには次のように記載されています。
1 つの NioClientSocketChannelFactory には 1 つのボス スレッドがあります。要求に応じて接続を試みます。接続試行が成功すると、ボス スレッドは、接続されたチャネルを NioClientSocketChannelFactory が管理するワーカー スレッドの 1 つに渡します。
ワーカー スレッドも、サーバーの場合と同じように機能するようです。
私の質問は、私のプログラムから外部サーバーへの接続ごとに専用のボススレッドが 1 つあるということですか? このような接続を何百、または何千も確立した場合、これはどのように拡張されますか?
補足として。ChannelFactory のBossExecutorとworkerExecutorの両方として単一の Executor (キャッシュされたスレッド プール) を再利用することによる悪影響はありますか? 異なるクライアントやサーバーの ChannelFactory インスタンス間での再利用についてはどうですか? これはここでいくらか議論されていますが、私はそれらの答えが十分に具体的であるとは思いません. 誰でもこれについて詳しく説明できますか?
netty - WSSを使用したDraft10
SSL(WSS)上でNettyDraft10の最新の例を実行しようとしています
次のポート構成を使用しています。
ポート:80:Apache non ssl
ポート:443:Apache ssl
ポート:8080:Tomcat
ポート:8877:Netty Web非SS
ポート:9977:Netty SSL
しかし、SSLハンドラーコードを埋め込むと
WebSocketServerHandlerクラスにエラーメッセージが表示されます
これは私のパイプラインコードです
何か案は?
乾杯、
タミール
netty - JBossNettyでクライアントが予期せず閉じたときに通知を受け取る
Nettyサーバー側にリスナーがありますか。これは、クライアントが予期せず閉じたときに通知されます(たとえば、クライアントm / cのLANケーブルが取り外された場合)。DefaultChannelHandlerのどのメソッドも呼び出されていません。LANケーブルが抜かれたとき、クライアントは非アクティブ(データを送受信していない)であると想定します。
または、チャネルが有効かどうかを確認するために、サーバー側にKeep-Aliveモニターを実装する必要がありますか?
java - Netty で使用する Protobuf を指定する最善の方法 (組み込みの protobuf サポートを使用することをお勧めします)
protocol buffersでプロトコルを指定しています。トランスポート層は、Nettyの Protocol Buffers サポートを利用しています。重要なのは、Netty のProtobufDecoderがMessageLiteの 1 つのタイプのみを受け入れることです。
ここで、さまざまな種類のメッセージをこのチャネルで送信したいと考えています。各サブタイプには、構造化された情報が関連付けられています。Protocol-buffers には継承メカニズムがないため、一種の構成を使用しています。正しい方法で行っているかどうかはわかりません。
私のアプローチは、さまざまなイベントを列挙型で分類し、オプションのメンバーを使用してそれらの違いをカプセル化することでした。以下を参照してください.proto
。わかりやすくするために簡略化しています。
ここでの問題は、受信コードで EventType.ERROR と ErrorEventDetail を関連付ける必要があることです。これは少し不器用に感じます。
簡体字Events.proto
:
これは最適ですか?どういうわけか extends を使用した方がよいでしょうか、それともおそらく の他の用途でしょうenum
か?
それとも、ある種のヘッダーでメッセージの種類を識別できるまったく新しいOneToOneDecoderを作成する必要がありますか? 私はこれを行うことができましたが、むしろしたくありません...
ありがとう
java - メモリを無駄にすることなく、JBoss-Netty で無制限のフレームサイズを使用する方法は?
VM 間でオブジェクトを通信するためにnettyを調べます。ObjectEncoder
&をそれぞれ使用ObjectDecoder
して、これらをシリアル化します。
このソリューションは最大 1MB サイズのオブジェクトに制限されていることがすぐにわかりました。より大きなオブジェクトを通信するつもりであり、このサイズを制限するつもりはないためInteger.MAX_VALUE
、最大フレーム長を設定していました。
残念ながら、この値は一部の buffer を初期化するために取得されているように見えるため、不必要な GC が発生し、OutOfMemory になる可能性が非常に高くなります。
DynamicChannelBuffers を使用しているときに無制限の ObjectEncoder/Decoder を作成して、メモリが無駄にならないようにする方法はありますか?
multithreading - play(netty3) アップロードがシングルスレッドを使用するのはなぜですか?
play を使用してプロジェクトを開発し、netty3 をアプリケーション サーバーとして組み込みました。次のテスト コードを確認してください。
ファイルを同時にアップロードするために 2 つのブラウザー (Firefox と Chrome) を開いたとき、「upload(File file)」メソッドでブレークポイントをデバッグしました。しかし、処理中のスレッドは 1 つだけでした。その後、2回目の依頼が来ました。
出力は次のとおりです。
しかし、Tomcat/Jetty では、コンソールに 2 つのスレッドが出力されました。
以前に同じ問題に遭遇した団体はありますか?