我正在开发一个Web应用程序,它充当移动设备的电子邮件客户端。在此应用程序中,用户可以登录并提供大量电子邮件ID以进行监控.Web应用程序中有两个主要类。 1.MailGetter 2.MailFormatter
MailGetter类的行为:
MailFormatter类的行为:
示例:
<mail>
<from>FromEmailID</from>
<to>ToEmailID</to>
<subject>Subject</subject>
<body>Email Body</body>
<attachments>
attachment
</attachments>
</mail>
MobileResponderServlet:Web应用程序中还编写了一个单独的servlet,它将读取简单的xml文本文件并将读取的内容发送到移动设备
此应用程序的主要缺点可能是“MailGetter”类将等待“MailFormatter”类的所有函数(包括递归调用)完成执行。一旦控件从“MailFormatter”类返回到“MailGetter”类,它将从邮件服务器获取下一个消息对象并将其传递给“MailFormatter”类。因此,向移动用户暗示新的电子邮件会消耗时间。即使将“MailFormatter”类实现为单独的线程,也要考虑在一个收件箱(对于单个emailid)中是否有1000个新电子邮件,它们将调用1000个“MailFormatter”线程,这将使该进程获得更多资源密集的。
所以我决定从“MailGetter”中拔掉“MailFormatter”。 “MailGetter”将作为单独的Web应用程序在一个服务器中运行,而“MailFormatter”将作为另一个服务器中的单独Web应用程序运行。在获得最近的电子邮件消息对象“MailGetter”之后,Web应用程序将持久存储(通过message.writeTo(FileOutputstream))消息对象,该位置对于“MailFormatter”也是通用的。然后“MailFormatter”类读取(通过MimeMessage(Session,InputStream)构造函数)并逐个解析消息对象,然后将“XML Content”存储在另一个位置,该位置将由“MobileResponderServlet”读取并发送到移动设备。
这个过程会实时有效吗?这是否会引起问题,特别是在“MailGetter”和“MailFormatter”Web应用程序之间共享消息对象时?如果还有其他方法,请告诉我。此Web应用程序将处理超过5000个用户(至少),他们提供了大量用于监控的电子邮件ID。
答案 0 :(得分:0)
我认为你能做的唯一实际的事情就是把一些测试场景放在一起。以上内容有太多变数,无法保证与绩效有关的实际答案。
将包含一组测试电子邮件的源邮箱放在一起,然后将一些简单机制联合起来查询,将您的邮件转储出来,然后使用您的第二个进程来使用。这种机制很可能不是你的完整解决方案,但应具有代表性。
最好使这个可重复且一致,因此当您实施真正的解决方案时,您可以研究它是否变慢,和/或基准测量和一致测量。