問題タブ [bayeux]
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.
cometd - データの公開に関する CometD の問題
私は CometD を初めて使用し、チャンネルでデータを公開する際に問題があります。チャネルで handshake() を呼び出さないため、次のエラーが発生します。
Sender : null
Sender : L:/abc/1?
Exception in thread "Thread-9" java.lang.IllegalStateException: Method handshake() not invoked for local session L:/abc/1?
at org.cometd.server.LocalSessionImpl.getId(LocalSessionImpl.java:161)
at org.cometd.server.ServerChannelImpl.publish(ServerChannelImpl.java:309)
at packagename.CometDSender.sendData(CometDSender.java:64)
at packagename.ProcessorImp.processData(ProcessorImp.java:18)
at packagename.TestSource.processNewData(TestSource.java:50)
at packagename.TestSource.run(TestSource.java:36)
at java.lang.Thread.run(Unknown Source)
しかし、私が含めるsender.handshake()
と、次の例外が発生します
以下にクラスを含めました。私が何か欠けているかどうか誰かに教えてもらえますか:
public class CometDSender は Sender を実装します {
}
cometd - CometD サブスクリプション リスナー
クライアントからのサブスクリプション リクエストの処理と、リクエストに基づく処理の実行に問題があります。サーバーでサブスクリプション要求が受信されたときに、メソッドを呼び出して何らかの処理を実行できるようにしたいと考えています。次の CometD のドキュメントを参照し、「サブスクリプション構成のサポート」で概説されている例を試してみましたが、うまくいきません。
http://www.cometd.org/documentation/2.x/cometd-java/server/services/annotated
Spring Bean を使用して既に Bayeux サーバーを作成しており、サーバー側で作成した他のチャネル名にデータを公開できます。ヘルプまたは追加情報。このトピックについていただければ幸いです。
私が使用しているコード例:
cometd - ユーザー認証情報を Bayeux サーバーに保存する
クライアントが特定のチャネルをサブスクライブするときに、クライアントの UserName と SessionId を保存したいと思います。canHandshake() をオーバーライドすると、次を使用してユーザー資格情報を取得できます。
これらの資格情報を保存し、後で取得する方法を知りたいですか? ここで認証ドキュメントを見てきましたが、認証データをセッションにリンクすることについて言及しているだけです。これは Bayeux サーバー側のセッションですか??
ありがとう
cometd - Bayeux サーバーの構成の問題
当社の CometD/Gigaspaces アプリケーションが Bayeux サーバーの重複インスタンスを作成するという問題がありました。ここに投稿された以前の質問を参照してください。Gigaspaces でこの問題を調査した結果、GigaSpaces には PU.XML と呼ばれるアプリケーション コンテキスト ファイルの特別な処理があるため、アプリケーション コンテキスト ファイルで定義された各 Bean が 2 回作成されていたことが判明しました。PU.XML ファイルの名前を変更することでこの問題を解決しましたが、現在の問題は、クライアント側でデータを受信しておらず、「NetworkError: 400 Unknown Bayeux Transport - http://localhost:9292/cometd
」というエラーが表示されることです。
以前は、アプリケーションが Bayeux サーバーの複製インスタンスを作成したときに、Bayeux サーバーが実行されていたスレッドの最初のインスタンスを終了するための回避策を用意しました。その結果、Web を使用してチャネルにデータを公開することができました。アプリケーション コンテキスト ファイルで構成したソケット。
現在の構成を見て、Spring を使用して Bayeux サーバーを正しく構成およびエクスポートするための代替ソリューションがあるかどうかを教えてください。Bayeux Bean が正しくエクスポートされていない、またはエクスポートが遅すぎる可能性はありますか??
更新された Web.XML とアプリケーション コンテキストの構成を以下に掲載しました。POM.XML の CometD バージョン/Jar は、以前の投稿と同じです。さらに情報が必要な場合。私にお知らせください。
現在の Web.XML:
現在の applicationContext-gigaspaces.XML:
publish-subscribe - Faye のルームへのクライアント パブリッシュ動作をフィルター/防止する
socket.io が問題を引き起こしているので、私が取り組んでいるプロジェクトに Faye を使用することを検討していました。私は彼らの github でいくつかの例をセットアップして試してみましたが、クライアントは接続先の部屋に直接公開できることがわかりました。これは、私が望むものとは異なる動作です。特定のルームでのクライアントの動作を、まったく公開できないように制限したいのですが、サーバーは定期的にデータをルームに送信し、新しい情報をすべて更新します (基本的に、特定のルームでの厳密なサブスクライブ動作)。Faye でこの種の動作は可能ですか、それとも間違ったツリーを吠えていますか?
java - 注釈 Cometd Java クライアント
Cometd ドキュメントの状態: サブスクリプションを実行するコード内の適切な場所は、 * /meta/handshake 関数です。/meta/handshake リスナーは、クライアントが実行する明示的なハンドシェイクとサーバーがトリガーする再ハンドシェイクの両方で呼び出されるため、サブスクリプションが常に適切に実行され、サーバーの状態との一貫性が保たれることが保証されます。* JavaScript と継承スタイルは、ネットワーク接続が再開されたときにサブスクライバーを失いません。以下に示すように、コードに注釈付きの cometd Java クライアントを使用すると、サブスクライバーが失われます。bayeuxClient.handshake(); 内のチャネルにサブスクライブするにはどうすればよいですか? 注釈付きスタイルを使用する方法。
注釈付きスタイル
継承されたスタイル