問題タブ [cometd]
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.
jakarta-ee - コードで ExceptionInInitializerError が発生するのはなぜですか?
ExceptionInInitializerError が発生する理由を知りたいですか?
プラットホーム:
- ウィンドウズ;
- グラスフィッシュ 3.1.2.2;
- メモ帳++;
- Cometd Java ライブラリ。
- Jetty ライブラリ;
- Javac コマンドライン。
私はcometd Webアプリケーションをセットアップするために歩いています。いくつかのデバッグの後、jetty: HttpClient クラスが ExceptionInInitializerError を引き起こしていることに気付きました。
私がしたことは、問題が発生する場所が見つかるまでコード行にコメントを付けることでした。
エラーが発生する私の CometD_Client クラスは次のとおりです。
編集:asadmin generate-jvm-report --type=thread
これを適用すると、ログが取得されます:
web.xml が役立つ場合、これは私のデプロイメント記述子です。
私のコードをデバッグするために助けを求めて申し訳ありませんが、私は何日もあらゆることを試しましたが、それでも ExceptionInInitializerError は私を困惑させます.
session - タイムアウトしないための CometD ロング ポーリング作成セッション
UI 側で ExtJs + CometD を使用し、アプリケーションのバックエンドとして Spring + Jetty を使用しています。ユーザーは、Spring 認証マネージャー (j_spring_security_check) を使用して認証されます。通常の http リクエストは特定の URL パターン (/myapp) で行われ、cometd 通信は別の URL パターン (/cometd) で行われます。
サーバーでセッション タイムアウト値を 30 分に設定しています。ユーザーがログインすると、CometD アクティビティが開始されます (ハンドシェイク、接続など)。cometD が WebSocket および long-polling として使用するための Bayex トランスポートがあります。WebSocket をサポートしていないブラウザの場合、CometD 通信はロング ポーリング メカニズムを使用して行われます。
問題は、CometD クライアントからのロング ポーリングが原因で、サーバーのセッション タイムアウト カウンタは、CometD ロング ポーリングからのハートビートが到着したときに常にリセットされます。このため、サーバー上でセッションがタイムアウトすることはありません。
リクエストが特定の URL (私の場合は cometD url) に届いた場合、セッションのセッション タイムアウト値のリセットを回避する方法はありますか。
また、cometD がサーバーに送信する HTTP ヘッダー内の JSSIONID パラメータを削除できれば可能ですか。おそらく、http ヘッダーから JSESSIONID を削除できれば、サーバーはそのセッションのタイムアウト カウンターをリセットしません。
ありがとう、
ブリジ
cometd - CometD サブスクリプション リスナー
クライアントからのサブスクリプション リクエストの処理と、リクエストに基づく処理の実行に問題があります。サーバーでサブスクリプション要求が受信されたときに、メソッドを呼び出して何らかの処理を実行できるようにしたいと考えています。次の CometD のドキュメントを参照し、「サブスクリプション構成のサポート」で概説されている例を試してみましたが、うまくいきません。
http://www.cometd.org/documentation/2.x/cometd-java/server/services/annotated
Spring Bean を使用して既に Bayeux サーバーを作成しており、サーバー側で作成した他のチャネル名にデータを公開できます。ヘルプまたは追加情報。このトピックについていただければ幸いです。
私が使用しているコード例:
java - Cometd チャネルを動的に作成してサブスクライブする方法は?
非常に単純な cometD アプリを作成しようとしています。主にチャネルを動的に作成したい。最初に localsession チャネルを試し、作成後、クライアント側の JavaScript を介してサブスクライブしました。完璧に機能しますが、動的チャネルの作成には適していません. javascriptを介してrom変数を渡すROOM: 'firstroom'
と、次のようなチャネルが作成されます"/members/firstroom".
しかし、ROOM のような別のユーザーからの別の呼び出しでは: 'anotherroom' 別の部屋を作成しますが、古い部屋を破壊します。
簡単に言えば、動的に作成されたすべてのチャンネルをメモリに保存したいのです。私が試したクライアントセッション:
次に、次のようにサーバーで作成してサブスクライブしようとしました:
しかし、サーバー側のサブスクリプションがクライアント側のhtmlコードをどのように変更するかを考えています。どうやって
交換します
manage_members はサーバー側のサブスクリプションに含まれます。
簡単にチャネルを動的に作成して保存する方法は?
websocket - CometD ロング ポーリングは固定接続を使用しますか?
CometD のロング ポーリング メカニズムが永続的な接続を使用するのか、メッセージがプッシュされた後に切断してから再接続するのかについて、明確な答えを見つけることができませんでした。
これが私にとって重要な理由は、現在、すべてのメッセージ (またはメッセージのバッチ) がサーバーから送信された後に切断および再接続するロング ポーリング プッシュ クライアントを使用しているためです。取り除く。すべての「プッシュ」が非常に長いリクエスト/レスポンスのように見えるため、互換性のためにこれを行うと想定しています。これは、すべてのブラウザで動作するはずです。
では、CometD のロング ポーリングは永続的で長寿命の http 接続を使用するのでしょうか? 答えが「はい」の場合、それは条件付きですか? つまり、送信されたメッセージごとに「要求/応答/再接続」にフォールバックするケース/ブラウザーはありますか?