私はモバイル用の電子メールクライアントとして機能するWebアプリケーションを開発しています。このアプリケーションでは、ユーザーはログインして監視用の多数の電子メールIDを提供できます。Webアプリケーションには2つの主要なクラスがあります。1.MailGetter 2.MailFormatter
MailGetterクラスの動作:
- 10分ごとに実行されるTimertaskが開始されました
- 監視用に提供されているデータベースから多数の電子メールIDを取得します
- 最初の電子メールIDのメールサーバーとの接続を確立し、最近到着した電子メールメッセージオブジェクトを取得します
- メッセージオブジェクトをMailFormatterクラスに渡します
MailFormatterクラスの動作:
- 電子メールメッセージオブジェクトを解析します
- パーツを1つずつ解析するために、メッセージに多数のマルチパートがある場合に行われるさまざまな再帰呼び出し
- このメッセージと一緒に添付ファイルもダウンロードします
- xml文字列をMailGetterクラスに返します。これは、次の内容の単純なテキストファイルとして保存されます。
例:
<mail>
<from>FromEmailID</from>
<to>ToEmailID</to>
<subject>Subject</subject>
<body>Email Body</body>
<attachments>
attachment
</attachments>
</mail>
MobileResponderServlet:別のサーブレットもWebアプリケーションにコーディングされており、単純なxmlテキストファイルを読み取り、読み取ったコンテンツをモバイルに送信します。
このアプリケーションの主なデメリットは、「MailGetter」クラスが「MailFormatter」クラスのすべての関数(再帰呼び出しを含む)の実行が完了するまで待機することです。制御が「MailFormatter」クラスから「MailGetter」クラスに返されると、メールサーバーから次のメッセージオブジェクトを取得し、それを「MailFormatter」クラスに渡します。そのため、モバイルユーザーへの新着メールについての情報提供には時間がかかります。「MailFormatter」クラスが個別のスレッドとして実装されている場合でも、1000個の「MailFormatter」スレッドを呼び出す単一の受信ボックス(単一のemailidの場合)に1000個の新しい電子メールがある場合を検討してください。これにより、プロセスのリソースが増えます。集中的な。
そこで、「MailFormatter」を「MailGetter」から削除することにしました。「MailGetter」は1つのサーバーで別のWebアプリケーションとして実行されますが、「MailFormatter」は別のサーバーで別のWebアプリケーションとして実行されます。最近の電子メールメッセージオブジェクト「MailGetter」を取得した後、Webアプリケーションは(message.writeTo(FileOutputstream)を介して)「MailFormatter」にも共通の場所にメッセージオブジェクトを保持します。次に、「MailFormatter」クラスは(MimeMessage(Session、InputStream)コンストラクターを介して)読み取り、メッセージオブジェクトを1つずつ解析してから、「XMLコンテンツ」を別の場所に格納します。この場所は「MobileResponderServlet」によって読み取られ、モバイルに送信されます。
このプロセスはリアルタイムで効率的ですか?これは、特に「MailGetter」と「MailFormatter」のWebアプリケーション間でメッセージオブジェクトを共有しているときに問題が発生しますか?他に方法があれば教えてください。このWebアプリケーションは、監視用に多数の電子メールIDを提供した5000人を超えるユーザー(最小)を処理します。