3

私はJAVAのGAEでチャットアプリケーションを構築しようとしています。私はすべてのオンラインユーザーとそのネットワーク(ある種のチャットルーム)を数える必要があり、この情報は絶えず更新される必要があります。私は(間違って?)JavaのSerlvetContextメソッドとSet / Get Attributeメソッドを使用して、オンライン/オフラインユーザーを更新し、その情報をすべてのサーブレットと共有できると想定しました。私が知ったように(素敵なバグで)、GAEはdistributed \ cloudサービスであるため、ServletContext.setAttributeを効果的に実装していません-つまり、私のアプリはおそらく複数のJVMで実行され、ServletContextに関する情報は共有されるだけです同じJVMに属するサーブレット間。

もちろん、これは私にとって大きな問題です。いくつかの質問-1)ServletContextは実際にGAEで正しく機能しませんか?2)GAEは私のような初心者のWeb開発者にとって悪い選択ですか?サーブレット\JSPルールに対応しない新しい問題や問題を常に見つけているように思えます。初心者がサーブレットを学ぶのは難しいので、GAEは正しい選択ではないでしょうか。3)サーブレット間で情報を共有するにはどうすればよいですか?

4

2 に答える 2

2

もしあなたが本当にあなた自身の目的のためにJavaEEを学ぼうとしているのなら、あなたが言及した理由でおそらくGAEを避けるでしょう。それは完全に良いサービスですが、そうです、それはあなたの学習の邪魔になるかもしれないそれ自身の一連の警告を持っています。目的に合わせてEC2インスタンスを起動する方がよい場合があります。

そうは言っても、正解です。AppEngineはインスタンスをスピンアップおよびスピンダウンしてリクエストを処理します。共有状態が必要な場合は、インスタンス間で共有されるmemcacheを使用する必要がありますが、複数のユーザーが同時に書き込みを行う可能性があるため、memcacheオブジェクトへのアクセスを管理する必要があります。

于 2012-04-18T15:18:34.267 に答える
0

Google App Engineでは、アプリケーションの状態は通常、データストアを使用してインスタンス間で共有されます。要件はよりリアルタイムであり、ポーリングを使用すると適切に動作しない可能性があるため、(おそらくデータストアに加えて)チャネルAPIを使用する必要があります。

https://developers.google.com/appengine/docs/java/channel/

そのページからの引用:

Channel APIは、アプリケーションとGoogleサーバーの間に永続的な接続を作成し、アプリケーションがポーリングを使用せずにリアルタイムでJavaScriptクライアントにメッセージを送信できるようにします。これは、新しい情報についてユーザーをすぐに更新するように設計されたアプリケーションに役立ちます。

于 2013-09-27T06:45:16.063 に答える