即时消息 - Java上的单个连接或多线程

时间:2014-03-14 09:39:33

标签: java multithreading email

我应该发送即时电子邮件到一组 联系人在时间紧迫的应用程序中。

说,我在列表中有n个联系人。所以,我可以做以下任何一种情况:

i。)向所有这n个联系人发送一封电子邮件作为多个接收者。

ii。)在n个线程中为每个接收者分别发送一封电子邮件。

在第一种情况下,我在我的终端设置一个连接,然后将其发送出去。

在我的smtp服务器的第二个,n个连接中。但是,它是并发的。

哪一个更快?

3 个答案:

答案 0 :(得分:0)

第一种情况更快,因为它只发送大约x个字节到服务器(消息的大小),第二种情况发送大约x * n字节到服务器上(我假设)单线是否交错或不。

答案 1 :(得分:0)

使用您的第一个选项,只会向每个收件人发送一份副本,而且应该相对更快。但取决于收件人数量和服务器容量。 你的第二个选择虽然是并发的' n'建立连接并在每个线程中发送相同的副本。比率::线程运行=发送给个人收件人的邮件。

是的,如果您必须安排将邮件发送给更大的群体,则第二个选项会更好。 例如:在这种情况下,MNC向其80000名员工发送邮件收件人限制可能会派上用场,邮件将以X&C;收件人,即5000名员工。而在这种情况下,由于服务器故障,第一个选项可能会变为失败。

实际示例:我在Infotech工作,这里的邮件收件人组根据部门进行维护,但是有一个通用组,其中存储了所有收件人的邮件ID。错误地,用户之一触发了该通用组的邮件,并且在该邮件会话之后开始导致服务器完全失败。

在这种情况下,服务器容量等因素影响较大。

答案 2 :(得分:0)

电子邮件并非旨在成为即时消息 如果您想要即时消息,则需要p2p类型的连接。如果您打算使用电子邮件,而不管您将如何发送电子邮件,那么太多其他因素都会产生干扰。通常第一种方法会(稍微)更快,因为它将允许邮件服务器优化消息的发送方式。

请参阅ServerSocket() http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html和Socket()docs.oracle.com/javase/7/docs/api/java/net/Socket.html

如果您需要保证交付,如果速度更重要且服务器/客户端位于同一网络上,您可能需要查看MulticastSocket http://download.java.net/jdk7/archive/b123/docs/api/java/net/ ...