日期:2014-05-20  浏览次数:20698 次

高分求教:如何实时刷新
比如说有a,b,c三个人同时操作同一个系统(tomcat容器),
    当a向系统新增一条记录后,      
    怎样在b,c的页面上即时自动得到a新增的记录。      
    一般刷新一下b,c的页面就可得到a新增的记录,      
    问题是怎样才能a新增记录后,b,c页面马上自动刷新?      
       
    以前我们的做法是让b,c页面定时自动刷新,显然这种有事没事都去刷新页面,查数据库的做法很浪费资源。

    或者用socket,又如何在tomcat启动时,启动指定的socket?browse客户端,又如何与socket通信?jsp中套入Applet,调用socketclient行得通么?
       
    这里有哪位仁兄有类似的开发经历?有没人知道用什么方法或是哪里有相关资料!

------解决方案--------------------
B/S耶...你用C/S好了,或者用别的控件吧,因为有一些网上聊天室...所以可以问问那些情况.
------解决方案--------------------
学习
------解决方案--------------------
b/s怎么可能做到实时呢?
------解决方案--------------------
这种方法我以前做的项目中用到过,不知道你说的是不是无状态刷新!
------解决方案--------------------
两个方面解决,浏览器部分,把显示实时数据的部分做成无刷新的,客户端定时向服务器查询,但是不是查数据库,而是访问服务器标志,该标志用来标志最近数据是否更新。如果标志显示数据被更新,再查询数据库并返回。
要是这样还觉得不够猛,就需要为核心业务数据在应用服务器上作缓存了,让应用服务器为数据服务器分担些,但这需要对业务抽取准确,这个东西必须给稳定。
要是还想再榨点汁,就是客户端缓存了,也就是每次交互的数据仅仅是变化的数据,比如多了哪条少了那条,由客户端代码更新页面。但是缺点更明显了,客户端变化相对比较频繁,每次变动都给改改改。
------解决方案--------------------
让b,c页面定时自动刷新

否则真的没有办法做到了
------解决方案--------------------
服务器是不能主动向浏览器发送信息的,所以只有浏览器定时请求数据。
------解决方案--------------------
只能在B,C的浏览器端发起刷新,不过有些变通的办法可以降低刷新对服务器的压力,比如用页面的JS脚本问问服务器是否需要刷新,刷新时也用JS脚本,只提取新增的数据,然后用JS插入到页面中。看看AJAX的书吧
------解决方案--------------------
监听?
------解决方案--------------------
学习~
------解决方案--------------------
在BS结构的应用中,相对“实时”的刷新原则上说是不可能的。
有解决的办法,比如通过ActiveX控件、Applet等和服务器建立长连接,但是要求用户安装ActiveX控件(并且浏览器限制在Windows下的IE)或者java运行时。
还有准“实时”的办法,就是用客户端脚本,通过XmlHttpRequest这种东西来定时发送请求,比如每秒一次,来查询页面数据的版本更新。这样对客户端浏览器的限制较少,但是有较大的延时;至于频繁的发送请求带来的服务器压力和客户端处理器负载,问题倒不是太大。
所以比较好的方案是,在服务器端写入数据的时候,维护一个缓存,然后其他页面通过脚本的请求来获得新版本。
------解决方案--------------------
学习
------解决方案--------------------
这个不是和股票软件一样了,要学习啊!!
------解决方案--------------------
我觉得很多网站都实现了这个阿
比如我们一般看的网上直播等等

------解决方案--------------------
用socket
刷新后通知客户端的浏览器
------解决方案--------------------
要在BS里用实时刷新的话,我想只有AJAX了。
AJAX可以做到页面的局部刷新,异步交互!很强的!
可以找本AJAX的书看看。
------解决方案--------------------
可以使用观察者模式,在页面A新增数据后,将服务端程序某个变量的值设为请更新数据,页面B、C通过ajax轮询服务端的更新变量,若更新变量设为请更新的话,则从服务端获取数据。实现页面的刷新,不过这样的话对客户端负荷较大。
不知道高手们怎么看
------解决方案--------------------
先用可行的方法让东西跑起来,然后再考虑性能、负载之类的。
很多方法都需反复比较才能发现孰优孰劣。
------解决方案--------------------
以前有过类似系统.数据库(Sql Server),程序C/S.
数据库建立扩张存储过程(里面是用socket发数据),数据库有一张表,用来记录登陆的用户的ip地址. 另外,在要刷新的表上建立触发器(主要是更新和插入的),表中有数据变化时,调用扩展存储过程,立即给客户端发socket消息,消息包中封装要刷新数据的主键.客户短收到消息后只刷新变化部分的记录(不要用敏感控件).