要求是这样.
服务器端数据一但改变,所有连接到服务器的客户端的JSP页面数据就全部更新掉.
打个比方.
比如就像是查看股票行情的一个jsp页面,现在我连在上面,这时候服务器数据一但改变,则服务器就马上把所有连在这个服务器上面的客户的jsp页面数据全部刷新一遍.
要求:1.不能用jsp页面定时刷新.这样总闪不好
     2.不能用ajax.我看了一下ajax实现动态刷新也是用的定时去连服务器.人数多的情况下,数据量又大,服务器也受不了.
所以只能从服务器端想办法.
我用了个方法,就是保存客户的request和respones信息,然后用foword跳转.不过总报错. 有没有人能解决这个问题? 我今天不睡觉了,在线等答案!请达人们速来救我.!!!!!!!!!!!!

解决方案 »

  1.   

    我晕哦,你以为是C/S啊,B/S是基于于会话式的。服务器更多的是的被动式,我想到的可能就是和那个网络聊天的运行模式一样吧,不过我不会。应该都是在客户端访问服务器的吧
      

  2.   

    非用ajax不可,接个连接池的话应该不会太大问题了吧
      

  3.   

    我想应该不一定要用Ajax啊,像那些网页式的聊天室,难道他们是用Ajax技术吗?
      

  4.   

    那些应该也是ajax
    或者用applet
      

  5.   

    applet上用session监听吗?  最好是在服务器上 能传给客户端  
    这样好象效率会高一点..
      

  6.   

    暂时只想到
     <%   response.setHeader("refresh","1");   %>   
          没一秒刷新一次
      

  7.   

    要么你去作一个小插件装在客户装的。让服务器和这个小插件打交道,要不是不可能由服务器发启的,都是要客户端发起的。bs要不是cs
      

  8.   

    纯BS的一定要用AJAX,但可以优化。
    以前做过一个赌球行情的,和这个差不多,20秒刷一次,最新的行情变动还会闪。1.不要每次都去读数据库,反正大家看的都是一样的东西,一有改动马上放到一个缓存里,只从缓存里调数据。2.不要用xml,用纯文本,自已定一个规则,尽可能的节约流量。到IE再用js进行解析。
      我就是所有数据全部用逗号和|号分开,引号和别的都不用。
    3.如果服务器CPU强的话还可以只给用户改动过的数据,就是提交时有一项上次更新时间,只给用户更新过的数据,这个要遍历的,所以会有点慢,但因为在内存操作,还是比从数据库读要快得多几个数量级。
      

  9.   

    b/s不是c/s,http是无状态的,你这样的需求恐怕不好办.用Ajax,适当优化一下应该还好吧
      

  10.   

    服务器推技术,实时性无论如何都不能和C/S比啊,楼上说了做插件,那么就是C/S的范畴了
    ftiger(哈哈鱼)的方法可行,但是效率远远不能和C/S相比啊,如果你真得想做好,那么就用C/S做或装插件了
      

  11.   

    采用聊天室模式,使用框架显示再要显示更新页面实时刷新,这样可能会好点。ftiger(哈哈鱼) ( )方法很好的
      

  12.   

    要装插件的话,不如叫你的客户装个JRE
    这样用WEB START就可以了,还有利于JAVA的普及^-^
      

  13.   

    我觉得楼主的这个问题用现有的jsp技术不大可能实现,至少不会是立即更新的。
    可以让客户端,每过一段时间,自己发请求,但是这样会对服务器产生很大的压力。
      

  14.   

    cifco  你怎么解决的阿?
    另外服务器推技术具体是怎么实现的?
      

  15.   

    基于请求/响应的web应用程序。应遵守一个基本原则就是客户端发出请求,服务器才针对该请求进行响应,在没有客户请求的情况下,服务器不能主动发给客户端任何信息(你仔细想想就是发了浏览器端也收不到!)
    针对你的问题,一个用户向服务器进行请求,其它用户没向服务器请求的情况下,这些其它用户始终不可能收到服务器的任何信息(因为他们没发请求)。这也是这类问题通常通过客户端不断刷新从而不断产生对服务器的请求,来实现信息的接收的做法的一个原因。
    记住没有“请求”就没有“响应”!!!
    理论说了很多,不信动手试试。有兴趣的继续讨论,这里其实还有一个逻辑问题呢。先不说了:)
      

  16.   

    通过客户端动态刷新的效率其实是很慢的。可以设想一下,如果连接到服务器端的客户端有100万个,每个页面都过1秒向服务器请求一次,而且可能一个页面不止请求一组数据,可能请求多组数据......这样的效率在我的这个系统中是不允许的。所以只能使用服务器端数据变动向客户端送数据的东东。就是所谓的服务器推技术。
    具体的实现也很简单,就是客户端第一次请求到服务器以后,服务器将客户端的response状态保存下来,等服务器有数据更新了,激活保存response的队列,然后通过response.write 向客户端写入数据即可。速度还是比较快的,我们测试过,比客户端动态刷新的效率高不少。具体到页面怎么显示只要使用一点js 就行了。
      

  17.   

    我昏..."然后通过response.write 向客户端写入数据即可"....
      

  18.   

    是的,原理很简单。response.write向页面写入更新的数据,在加上一点js的语法传送到客户端。在客户端,定义一个专门用于接收服务器端字符并处理的函数,就行了。
    这里有一个成熟的商业应用:
    http://www.lightstreamer.com/
    有兴趣的话可以去看看。
      

  19.   

    楼主想搞清楚http://www.lightstreamer.com/原理再说话,否则很容易误导初学者,还以为B/S还真的能实现服务器端实时推进技术呢。Based on the AJAX-Comet。
      

  20.   

    搞这么多年第一次听说,用了一点js就是别人说的ajax吧。真要实现的话flash可以做到。
      

  21.   

    to:flyforlove(吾将远去)Comet技术的原理就是建立长连接,在通过ajax就是所谓的js来实现客户端。我参考了一个开源的comet项目就是pushlet,大概你也研究过。我觉得它的难点不是怎么样去实现服务器去推数据。它的难点是怎么样维持大量的客户端连接。如果你认为ajax comet 不是一个使用服务器推技术实现的,那你觉得它应该叫什么呢。
    或者你觉得服务器推技术有更好的解决方法?
    lightstreamer是个商业应用。不知道你是怎么知道它原理的。难道你反编译了它了吗。我之所以说lightsrteamer是使用服务器推技术,是因为它在客户端使用的js解析和我做的原理差不多。
      

  22.   

    你说的这种持续连接的方法,当年cgi的时候聊天室就大量使用。
    表现为并发数量很小。既然你的人数很多,肯定不合适。还是ajax的方案比较成熟,局部刷新。
    服务器端设置更新标志,每次都只是访问标志
    只有服务器端数据更新了,才真的去取数据。如果非要"实时"数据的话,还是不要走http协议了。
      

  23.   

    ajax定时刷新实时性和效率自然和这个是没发比的.
    还有并发性连接的问题,也不是问题了.现在很多服务器已经开始支持.具体你可以查一下资料.
      

  24.   

    回复人:cifco() ( 一级(初级)) 信誉:100  2007-05-28 22:35:15  得分:0

    ajax定时刷新实时性和效率自然和这个是没发比的.
    还有并发性连接的问题,也不是问题了.现在很多服务器已经开始支持.具体你可以查一下资料.-----------------------------服务器软件支持,不代表硬件支持。
    这种与服务器的长时间连接,本来就是对http的变态应用,只是应用于特定的场合,
    ajax的实时性差点,这个是必然的,
    效率,你怎么能说ajax的效率和这个没法比???
      

  25.   

    ajax的效率自然是和这个没法相比。这个不用测试就可以知道。
    ajax采用定时刷新的方法。先考虑一下网络的问题。每次定时刷新都由客户端重新与服务器端建立一次新的连接和响应。
    这个效率你自己可以算一算。是我建立一次连接,多次写数据效率高,还是每次客户端请求一次,服务器判断数据有没有变更在发送数据效率高。
    连接我的有100万个客户端,而且每个一秒请求连接一次,这个效率应该很好算吧。
    至于为什么不用flash和applet来做,自然也有原因的。现在的设计都是为了轻客户端,如果要是单位里面不能装插件的话,那不是不能浏览了吗。
    硬件不是问题,这个的瓶颈在于软件的支持。你测试过的话自然有答案。
      

  26.   

    回复人:cifco() ( 一级(初级)) 信誉:100  2007-05-29 10:21:20  得分:0

    ajax的效率自然是和这个没法相比。这个不用测试就可以知道。
    ajax采用定时刷新的方法。先考虑一下网络的问题。每次定时刷新都由客户端重新与服务器端建立一次新的连接和响应。
    这个效率你自己可以算一算。是我建立一次连接,多次写数据效率高,还是每次客户端请求一次,服务器判断数据有没有变更在发送数据效率高。
    连接我的有100万个客户端,而且每个一秒请求连接一次,这个效率应该很好算吧。
    至于为什么不用flash和applet来做,自然也有原因的。现在的设计都是为了轻客户端,如果要是单位里面不能装插件的话,那不是不能浏览了吗。
    硬件不是问题,这个的瓶颈在于软件的支持。你测试过的话自然有答案。-------------------------------------假设说有100万个用户,如果同时建立100万个长链接(这可以是没有断开的哟),你说你硬件没有问题????????
      

  27.   

    为什么不用ajax??奇怪了,那就只有用长连接flush了。或者用隐藏frame+JS,(这还是AJAX了)
      

  28.   

    b/s不是c/s,http是无状态的,你这样的需求恐怕不好办.用Ajax,适当优化一下应该还好吧