我现在做了一个个人日程安排,到达日程安排时间会自动在页面谈出对话框提醒.
目前是通过js定时调用后台把任务放到session中的,但感觉有时间差,不是很准确
频繁调用后台占用内存.
请问有什么好的方法吗?
希望大家来拍砖!
[b]问题补充:[/b]
目前我是用Ajax每5分钟调用一下后台,搜索到时的任务,然后返回页面提示的.需要每5分钟搜索一下数据库,远程调用,感觉很耗资源.虽然登陆时可以抓取,但运行一段时间后数据可能就不准确了,和数据库可能存在差异.有什么方法可以避免频繁的搜索数据库,还可以保证数据的准确性.
[b]问题补充:[/b]
你们做OA中的如日程安排,定时任务提醒,都是怎么实现的?
[b]问题补充:[/b]
如果不用session,采用缓存技术,通过ObServer实现内存数据的完整性,Ajax定时调用搜索内存数据,不知大家对这种方法有什么看法?
[b]问题补充:[/b]
抱歉,是我没说清楚,我说的远程,是指远程交互数据库,而非远程调用服务器相关接口,连接.
首先这种要求时效性很高的东西就不推荐用web来实现,
有一种技术叫做 Server push ,你可以去了解一下. dwr,extjs 都有自己的实现.特别是dwr,老早就有这个功能了.我曾经在自己的系统里面做了一套在线聊天的模块.后来感觉实用性不大,就取消了
[url]http://yourgame.iteye.com/blog/199079[/url] 这个是我做的关于在线提醒的一个示例
这就是要实时得到后台的数据信息嘛
这是服务端推技术, 也就是comet,
用dwr很方便就能实现
没能理解LZ为什么要获取了放到Session中呢?
这种需求时间要求进度应该还不至于要到很精确的吧.
1.客户端每分钟执行一次请求,请求结果直接送回界面不就可以了. 这种功能就是Ajax的拿手戏.
2.如果觉得这样在服务端负载太高,那就照下面的方式进行.登陆时获取需要提醒的时间,写到本地Cookie里面,写个JS定时器定时读Cookie时间到了就请求一次,这样就OK了.
当然也可以模拟的方式让Server Push,不过有点感觉杀机用牛刀. :D
个人意见,希望有用.
两个想法,仅供参考
1. 数据修改时送个相应过来修改相关的Cookie内容? (貌似不好实现,你说你是远程获取)
2. 建立一种机制定时更新Cookie. 比如每次到提醒时间就更新一次Cookie内容.或者定时每1小时更新一次Cookie.或者两者结合起来.
其实这些的实时性都不高,顶多也就轮询.你看人家163邮箱
:D ,偶没做过OA,不过我理解上面只能这样搞才好.
刚刚Google了一把客户端的定时机制基本上都是差不多的.
服务端的定时机制可以采用Quartz来做,不过我没能想到服务端定时执行如何推送到客户端页面来.
PS:服务端推送技术还是一个模拟技术,协议本身是不支持的.
一般采用客户端发起长连接来模拟.
不知道我上面的建议,LZ还有什么顾虑呢? :D
缓存更不可靠,相对Session缓存更不好管理.
[quote]通过ObServer实现内存数据的完整性[/quote]
LZ打算如何如何实现远程变动监控? 起个独立的线程什么呢??
那我觉得没什么太多关系,就这样做起来再看好了. 我没有其他的想法了. LZ自己权衡.
不过我个人觉得想太多也没有,试试看好了. 我个人认为我的那个方案问题不大. :D
session 中可以最开始取出服务器系统时间,然后跟客户端的时间进行比较时间差,利用这个时间差进行控制。不知行不行,如果还是不满足,那就利用SPRING 带的TIME进行任务调度(或者QUARTZ)。
可以使用 java.util.TimerTask 与java.util.Timer 两个来进行控制
我一个项目里就是通过这两个类来做的,运行很长一段时间了依然很好!