日期:2014-05-19  浏览次数:20719 次

问下关于dwr的问题
我其他地方采集报警信息存在数据库中,要实现服务器向前台传输报警警告,但是每个客户只关心关于他自己的车辆的报警(可能多辆车),我想用dwr,但是有些问题想问下:
1.我一采集到报警信息就存到数据库中,然后我希望能尽快在前台显示,我的方法是,在服务端的那个类每隔2s执行一次(就是每2s查询一次数据库,看是否有报警信息,如果有的话就刷新前台,显示报警信息),这个样处理合适吗?
2.当一个客户端连接后,我才开始查询是否有关于这个客户的报警信息,后台如何停止查询的,一种是客户端关闭时传递一个信息给这个类,让他不再执行,或者不正常关闭网页时,通过判断这个客户端的sessionid失效来停止执行。
3.还有一个我不懂,就是每来一个客户端,然后就建立一个长连接,这个相当于单独为这个客户端开一个线程吗(这个线程自动创建吗?我后台只是建了一个普通的类)?是通过sessionid来标记这个线程吗?还有就是连接断开怎么办?
希望能给解答下问题,或者推荐些资料,我看了网上一些资料不是很明白。。。

------解决方案--------------------
1.似乎也只有这样做比较合适,就看楼主对间隔时间的把握,和数据库的设计了。“是否有刷新”针对这个词来说,数据库的设计讲究就大了。。。
2.建议针对所有用户的查询,使用一条线程执行,而将用户登录进来的用户ID保存至全局变量,这样你的查询就只需要检索到全局变量中的用户即可,而用户推出登录的时候,关闭网页的时候,对应session失效的时候,都不应该再查该用户了。
3.个人觉得应该是一个长连接一条线程,具体怎么实现的,我也没有研究过dwr的源码。但可以肯定的是,并不是靠sessionId来标记的,因为dwr的推技术当中,有一个非常重要的观念,那就是scriptSessionId。也就是说,同一客户端的不同页面可以建立不同的长连接,那么这个时候,又如何使用同一个sessionId来标记呢?
------解决方案--------------------
设置 dwr.engine.setActiveReverseAjax(true);
报警service方法成功之后,通知所有线程更新...