看过一个方法
就是浏览器请求服务后,调用方法getInfo(),服务器定时返回信息简写:
String info="我随时改变";
public void getInfo()
{
 while(true)
 {
   out.print("信息内容:"+info);
   Thread.sleep(3000);
 }
}
问题:
现在有一个用户A,他发布了一条消息"我是A",这个消息传递到了服务端,同时有另一个用户B,他请求了服务,并且调用了getInfo()来接收消息.
那么,我把A发出的消息放到那里,才能让B的getInfo()随时得到最新的消息,由于每个servlet服务请求都是一个新的线程,所以感觉String info不能定义在servlet里,它应该放在一个公共的类里,而且是个单例,每个请求线程的getInfo()都在轮询这个单例类的info字段内容,是这样的么?

解决方案 »

  1.   

    DWR里处理是把这个放在一个静态变量里,好像可以!
      

  2.   

    有开源的 就不要自己写了。
    dwr2.0 有个“推”技术,就是服务器端和客户端建立长连接。
    你可以看看,
      

  3.   

    支持自己写,不是非常复杂的东西我都喜欢用自己写的,这是一种乐趣
    关于这方面的一些知识可以参考Comet:基于 HTTP 长连接的“服务器推”技术
    另外,dwr的Reverse也是个不错的现成选择
      

  4.   

    我想实现一个很小的功能,类似股票那种,一个数值改变,所有的用户在浏览器上都能看到变化数据.可能需要一两个类就能解决,实在不成在看dwr.
    dwr部署起来还要添加很多应用结构一篇关于单例的文章,还可以
    http://www.javaeye.com/topic/60179
      

  5.   

    "把这个info放在数据库里"如果是获取数据还可以使用,但是获取状态就有些不划算比如,一个数值10,当它变成11时,它的状态发生了变化,flag=1这个要广播到所有客户端,下次从数据库取时,仍然是flag=1,所以需要一个数据库操作把这个值再还原回flag=0的如果使用一个类字段,当out.print("信息内容:"+info); 后flag=0就可以了.