問題タブ [apache-mina]
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 - Mina を使用した Mock XMPP Server は一部の時間しか機能しません
PLAIN 暗号化スタンザを処理するモック XMPP サーバーを作成しました。私は Pidgin を使用して、ユーザーが実際に XMPP サーバー上にあり、通常の ping を送信していると Pidgin が判断するまで、セッション作成全体を行うことができます。
ただし、すべてのメッセージが正しく処理されているわけではないようで、ログインに成功したのは運が良かっただけです。私が話しているのは、おそらく実際に接続できる時間の 1/10 です。また、ピジンがメッセージを見逃したか、メッセージをダンプしてトランスポートを高速化したように見える場合もあります。
Pidgin の XMPP コンソール プラグインを有効にすると、最初の接続は常に成功しますが、2 番目のユーザーは接続に失敗し、通常は Pidgin がサービス ディスカバリを要求すると終了します。
私の Mina コードは次のようなものです。
は、SimpleServerHandler
メッセージ/スタンザの処理とセッションの作成を担当します。messageReceived
関数は次のようになります。
最後に、プロセスはメッセージの解析と応答の書き込みを担当します。私は自分の書き込みで同期化を使用します:
簡潔にするために処理コードは省略しましたが、特定のデータを探して応答を作成し、呼び出しを行うだけです。sessionWrite(...)
私の質問は、このパターンは機能しますか? そうでない場合は、受信したメッセージをキューに押し込み、単にタイマーからキューを処理することを検討する必要がありますか?
java - UDP を使用してサーバーにクエリを実行しますか?
サーバーにクエリを実行したい (約 100 を増やすことができます)
現在、ループで1つずつ繰り返しクエリを実行していますが、時間がかかりすぎます。
MultiThreading 、Nettyなどのネットで2〜3のオプションを見つけました。
どちらを選ぶべきですか?
ここにアルゴリズムがあります - >
一度に 100 個のサーバーに 100 個の UDP パケットを送信する
100 台のサーバーがそれぞれ 1 つの UDP パケットで応答します (これ以上の通信は必要ありません)。
その 1 つの UDP パケットを処理し、どこかに保存する必要があります。(私のサーバーは同時に複数のパケットを受け入れる必要があります)
編集: ゲームサーバー
tcp - TCP の長い接続のフェイルオーバーを処理する方法は?
同じアプリケーションベースのTCP長い接続(apache min socket)を実行するために多くのサーバー(クラスター)があります。1 つのサーバーがダウンした場合、クライアントにサーバーのダウンを知らせることなく、クライアントとの間で確立されたソケット接続を他のサーバーがどのように維持できるか (失敗) Linux での解決策はありますか? ありがとう。
java - Java アプリケーションでの TCP ハンドシェイクが非常に遅い
私たちの Java アプリケーションは、クライアントとサーバーで構成されています。私たちの実稼働環境では、接続の確立に長い時間がかかります (~40 秒)。
tcpdump を使用してネットワーク トラフィックをキャプチャしたところ、接続が確立されたときに次のパケットを確認できます。
他の環境では、3 つのパケットすべてがほぼ瞬時に発生します。
38 秒の遅延の原因、またはそれを診断するための手順を提案できる人はいますか? これは運用環境であるため、診断コードを変更することは難しいことに注意してください。
ここに私たちの環境に関するいくつかの詳細があります:
- クライアントは、内部で java.nio.channel.SocketChannel.connect(..) を使用するApache Mina 1.0.1 のSocketConnector を使用します。
- クライアントは IBM WebSphere 7.0.0.17 内で実行されています
- Java バージョン = 1.6.0、Java コンパイラ = j9jit24、Java VM 名 = IBM J9 VM
- OS は AIX、バージョン 6.1
apache-camel - ApacheCamelMinaコンポーネントを使用した要求/応答プロトコルの実装
TCPを介してXML-RPCベースのサービスにコンシューマーを実装する必要があります。サーバーへの接続を確立すると、次のことが必要になります。
- 認証資格情報はクライアントによって送信されます
- イベントサブスクリプションリクエストがクライアントから送信され、最後に
- クライアントは、メッセージが非同期で送信される「受信」モードに切り替えます。
- クライアントがそれ以上のイベントの受信に関心がなくなった場合、クライアントは手順1〜3を「巻き戻す」必要があります。
そこで、Apache Camelを使用して、Minaコンポーネントの明らかなエントリエンドポイント( "mina:tcp:// host:_port_?textline = true&decoderMaxLineLength = 10240&sync = true")を使用してクライアントを実装したいと思います。私の質問は、上記のステップ1、2、および4をどのように実装するのかということです。RouteBuilderのプロセッサが呼び出される前に、これらの「ハンドシェイク」手順を実行するにはどうすればよいですか?これはCamelでも可能ですか、それともこれを処理するためにストレートのMinaクライアントを作成する必要がありますか。このタイプの統合シナリオに対処するためのより良いオプションはありますか?
ありがとうございました。
-サンティ
java - バンドルの代わりに Mina JAR 依存関係を使用しますか?
Mina は最近、アーティファクトを*.bundle
ファイルとしてデプロイしているようですが、これは少なくとも迷惑であり、せいぜい悪です。
次のように Maven で Mina に依存している場合:
...その後、次のエラーが表示されます。
*.bundle
ファイルではなくファイルを探している理由がわかりません*.jar
。JAR ファイルを探して見つけられないのはなぜですか?
このプロジェクトに依存するプロジェクトがあり、Mina JAR がないとすべて失敗するため、これは特にイライラします。古き良き Java JAR はどうなりましたか?
apache-camel - Camelでいくつかのリクエストを集約した後、MINAリクエストに応答します
最終メッセージへの応答が前のメッセージに基づく必要があるminaサービスを実装しようとしています。各メッセージ(ヘッダー(1)、データ(n)、終了(1))は応答を受信する必要がありますが、「終了」メッセージへの応答は「ヘッダー」と受信した「データ」メッセージに基づいている必要があります。 「終了」メッセージとして。現在、特定の相関IDの「ヘッダー」および「終了」メッセージが見つかると完了するアグリゲーターにメッセージをルーティングしています。残念ながら、応答はメッセージがアグリゲーターに送信される前に(または同時に?)送信されるため、正しい応答を作成するために必要なすべてのデータを含む集約されたメッセージにアクセスできません。応答を構築します。
蓄積されたデータを手動で保存してアクセスせずに(つまり、ラクダのアグリゲーターを再実装せずに)これを行う方法はありますか?
編集:
ルートは次のようなものです。
わかりやすくするために、いくつかのタグと属性(、、など)を省略しましたcorrelationExpression
。completionPredicate
strategyRef
メッセージは適切に集約されており、「完了」したとき(つまり、集約されたとき)に適切に処理されていました。mina
ただし、エンドポイントを介してクライアントに返送される応答は、によって生成されたものであり、によって生成されたmessageProcessor
ものではありませんcompleteMessageProcessor
。
たとえば(そして、はい、それはかなり不自然な例ですが、私に耐えてください)、プロトコルが、クライアントが送信することを期待するデータメッセージの総数を含むヘッダーメッセージを送信することを含むとしましょう。次に、いくつかのデータメッセージを送信しますが、送信する予定のデータメッセージとは数が異なる場合があります。最後に、フッターまたは終了メッセージを送信します。その後、サーバーは、予想されるメッセージ数と実際のメッセージ数の差で応答する必要があります。messageProcessor
記述されたルートでは、個々のメッセージのみを処理するによってメッセージの数がわからないため、これは不可能です。集約されたメッセージ(ヘッダー、すべてのcompleteMessageProcessor
データ、および終了で構成される)を持つmina
この番号はわかっていますが、その時点で生成された応答はエンドポイントに伝播されません。
サーバーは個々のメッセージに応答する必要があるため、メッセージの解析を変更して、作成されたメッセージ全体が受信された場合にのみメッセージを生成することはできません。
java - IO クライアントで NIO サーバーを使用する
Minaに基づいてサーバーをNIOで動作させました。
通常のjava.net.Socket手法を使用して、このサーバー用のTCP/IPクライアントを作成しようとしています。接続を正常に確立できます (つまり、クライアント側でソケットを開いた後にサーバー側で呼び出されるorg.apache.mina.core.service.IoHandler.sessionOpened )。しかし、(クライアント側から) ソケットにバイトを書き込もうとしても、サーバーには何の影響もありません (つまり、org.apache.mina.core.service.IoHandler.messageReceivedは呼び出されません)。
なぜこれが起こるのか説明していただけますか?通常のクライアントのソケットベースのアプリから NIO サーバーにメッセージを送信することは可能ですか?
netty - Netty/minaの協力。nettyのChannelBufferをMINAのIOBufferにラップすることは可能ですか?
アイデアは、apachevysperを既存のnettyアプリケーションに統合することです。クライアントからnettyに接続されているChannelBufferをmina'aChannelBufferとして接続して、vysperに委任することはできますか?
アイデアは、apache vysperのカスタムnettyベースのエンドポイントを作成し、ChanellBufferを取得して、それをvysperに渡すことです。
unit-testing - apache mina クライアントの単体テスト
コネクタが NioSocketConnector である mina クライアントがあります。このクライアントと実サーバーの統合テストを作成しました。しかし、単体テストを行う方法が見つかりませんでした。たとえば、実際のソケットを開かずに、カスタム デコーダーとエンコーダーが正しく動作することをテストしたいと考えています。そして、メッセージがバッファなどに正しくキューに入れられていることをテストしたい.
テスト用の DummySession クラスを見つけましたが、このクラスがクライアントの完全な単体テストに十分かどうかはわかりません。
Mina は単体テストが簡単だと言っています。あなたのアイデアやサンプルコードへのリンクを手伝ってください。
前もって感謝します。