这有点象数据库连接,所以跟数据库连接同样的道理,同一时刻不会同时有那么多人操作数据库,或着是发送Email,而大部分时间用户是在浏览网页,或是写邮件!所以写个池子应该没有什么问题!

解决方案 »

  1.   

    多线程怎么解决问题,jsp servlet本来就是多线程的,用户量一上来java进程很容易就占用cpu100%,线程越多岂不死的更快?偶菜,请terry明示
      

  2.   

    如果像你后来所说的用户量一上来,CUP就%100的话,用线程也一样没用。据我所知,我公司之前的一个系统也是javamail做的,全公司上下有几百人,但没出现过你说的服务器不堪重荷的情况,我泡论坛这么久印象中也没听说过你的情况。很可能你程序写的有问题,如果你不想查程序方面的原因的话,我建议把邮件部分布署到一台独立的服务器上。还有,如果光是建个邮件服务器,根本不用javamail,大把第三方软件可以用,自己一个代码都不用写的。
      

  3.   

    如果是domino的邮件系统,你可以看看domino的帮助应该有接口可以监听到新邮件的,有个OUTLOOKCONNECTER吧好像不知道这个有没有帮助,还有你的轮循应该有一些算法,代理因该本地有数据库,你可以在内存里维护一个队列只轮循较多邮件的人,或者按照最近有新邮件的维护队列,对最近有新邮件的人进行轮循,较多人的轮循会对服务器造成较大压力(取决于你的线程数多少),但是这样的方式是个非及时系统有一定的延时。至于压力我觉的是你程序的问题,你在大量的并发访问时应当有选择的访问数据库直接返回结果或者直接启动该用户的查看邮箱状态的线程然后再访问数据库,控制主与mail服务器通信的数量。还有POP3协议上,可以给邮件打标记,如果邮件服务器上的邮件只有通过代理看到,那你每次只取新的邮件头信息,不要把整个邮件都取下来,具体怎么的有些忘了,一年多前做过个类似的东西。
      

  4.   

    jsp或者servlet是多线程的,也就是说你的javamail会以多线程的方式运行,所以不用担心这个循环会影响
      

  5.   

    是这样的,我写了个收邮件的程序,收我的163邮箱的100多封邮件,收了10几秒,我的机器p42.4 1.5G内存,outlook也不快,而这种邮件的代收代发相当于把所有用户的outlook弄到一台服务器上去跑了,这个压力不用担心吗?得用什么配置的服务器呢?用户那里就x345或稍好点的pc server。收回的邮件存在本地,列表时取头信息,浏览邮件时在取内容,这些是肯定的,但上班后的20分钟内,可能有一半的人要收邮件,压力还是不小。关于cpu100%,俺只是做了100次 system.out.print(“”),或定义一个String对象,连续执行的时候,cpu瞬间就100%或接近了,如果有io就更不得了了,这是我的机器上测的,可能不准确。当然如果没有并发可能没有问题,但是收邮件这样的操作,怎么让人放心啊