作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] JSP自动Refresh的方法
时间Thu Dec 5 02:33:08 2013
推文说得差不多了,我只是整理一下
※ 引述《fonz (寂寞的等待)》之铭言:
: 先说一下小弟的情境与目标:
: 目前架了一个基本的Web Server,假设有A, B, C...不同台电脑
: 在同一时间都在浏览Server中的同一个页面
: 假设目前画面上有5笔资料,不论是哪一台电脑做了新增修改删除功能
: 或是由其他程式去更动了资料。 希望所有正在看这个页面的电脑都能够
: 自动重新Refresh,执行查询的功能。
: 要求是需要很即时的刷新页面。
: 先说小弟的目前的做法:
: (1) 有一个方法是设定很短时间内,不断的让页面去执行query。
: 不过因为期望大概最少每5秒就可以检查一次,效率不是很好,这样只要稍微
: 观看的人变多,就算没有资料没有变化,还是会让资料库一直在做查询。
: (2) 这是目前的做法,埋一支socket applet在页面里面,
: 在使用者连入页面的时候,先去Server中某个纪录档留下自己的ip,
: 当有资料更新的时候,再触发Server 的socket server程式,通知埋在页面中的
: applet执行查询动作。
: 这样做现在有两个问题点。
: [1] 使用者端的防火墙没开,我一直在研究,很容易会造成整个架构出问题>"<
: [2] 在java 到1.7版之後,整个架构就不能run了。google查了一下,是applet
: 的安全性问题,现在只能要求先压在1.6以下...
你的 1 是古老解,据说还有延伸出用 frame 作的进阶招术
这样画面才不会闪烁
後来有了 AJAX 之後可以省去 http header 的 overhead
但是对写 JSP 的人而言,说不定还觉得更麻烦
(那就写 GWT 吧 XD)
你的 2,大抵上没办法实战使用
最惨的问题就在於... 如果没记错的话 socket 的 applet 要 sign 过
在这之前还要确保有装 JRE...
你可能很有恒心,但是广~~大的使用者并没有 XD
但是这年头,你的 2 有了替代品,就是 websocket
就实质动作来说,跟你要的 2 几乎一模一样
底层其实也是开 socket,只不过是 browser 恩准然後帮你开 XD
server side,之前版上也有文章
#1IRvALN4 提了一下
已经变成 JSR,所以 Tomcat 7.? 後都会内建
client side 就... 请出门左转 Ajax 版或是改用 GWT [喂喂]
插花外提,我前阵子思考了一下 websocket 跟 GWT RPC 的整合方式
後来想想,还是让 websocket 当 trigger 就好
也就是 server 要丢东西到 client,就从 websocket 丢个 signal
实际传输资料还是用 GWT RPC...... 省时又方便 XD
在 websocket 出来之前,还有一个很美妙(也可以说诡异)的解法
叫做 comet
http://en.wikipedia.org/wiki/Comet_(programming)
long polling 是 comet 的其中一个解法
不过还好我没跟上那个年代 [误] 就跳到 websocket 了 XD
所以这部份就跳过
你也可以参考一下这篇,然後只看中文跟 JavaScript 的部份就好 XD
http://josephj.com/entry.php?id=358
--
钱锺书:
说出来的话
http://www.psmonkey.org
比不上不说出来的话
Java 版 cookcomic 版
只影射着说不出来的话
and more......
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.234.218
1F:→ swpoker:单一SERVER~socket也不能开太多阿~ 12/05 09:45
2F:→ swpoker:老实说~异动纪录可放在SERVER记忆体也可以阿 12/05 10:00
4F:推 fonz:非常感谢! 12/05 12:05
5F:推 danny8376:swpoker 多少算太多? 10k都能了 难道你客户不只这数? 12/05 16:29
6F:→ swpoker:说的也是~应该不用担心这种事 12/06 10:42