0

私はモバイル用の電子メールクライアントとして機能するWebアプリケーションを開発しています。このアプリケーションでは、ユーザーはログインして監視用の多数の電子メールIDを提供できます。Webアプリケーションには2つの主要なクラスがあります。1.MailGetter 2.MailFormatter

MailGetterクラスの動作:

  1. 10分ごとに実行されるTimertaskが開始されました
  2. 監視用に提供されているデータベースから多数の電子メールIDを取得します
  3. 最初の電子メールIDのメールサーバーとの接続を確立し、最近到着した電子メールメッセージオブジェクトを取得します
  4. メッセージオブジェクトをMailFormatterクラスに渡します

MailFormatterクラスの動作:

  1. 電子メールメッセージオブジェクトを解析します
  2. パーツを1つずつ解析するために、メッセージに多数のマルチパートがある場合に行われるさまざまな再帰呼び出し
  3. このメッセージと一緒に添付ファイルもダウンロードします
  4. 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人を超えるユーザー(最小)を処理します。

4

1 に答える 1

0

あなたができる唯一の実際的なことは、いくつかのテストシナリオをまとめることだと思います。上記には変数が多すぎるため、パフォーマンスに関する実際的な答えを保証することはできません。

テストメールのセットを含むソースメールボックスをまとめてから、いくつかの簡単なメカニズムを組み合わせてこれをクエリし、メッセージをダンプしてから、2番目のプロセスを使用して消費します。このメカニズムは、完全なソリューションではない可能性が高いですが、代表的なものである必要があります。

これを再現可能で一貫性のあるものにすることをお勧めします。これにより、実際のソリューションを実装するときに、速度が低下しているかどうかを調べたり、ベンチマークと測定を一貫して行うことができます。

于 2009-06-30T11:15:37.140 に答える