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

高分求“消息接受和发送”解决思路及DWR的Ajax反推疑问。
我做的系统中需要实现一个消息发送和接受功能。类似于CSDN的消息提醒。如果有人回你的贴,后台就会立即提醒你收到了消息,你登陆的时候会有未读消息提示。

我用QuartZ实现定时器功能。然后主要的问题在:利用DWR的反推Ajax,将消息推送到客户端,问题在于,怎样推将消息推送到目的客户端。比如客户的main.jsp是目的地。例如客户A登陆了系统,他可以接受到自己的消息。或当他在操作过程中,有消息产生了,消息立即推送到客户A的main.jsp。因为存在多个客户同时登陆,访问main.jsp,那如何才能传递到客户A的main.jsp呢???

本人是第一次做消息功能,有很多问题不太明白。望高手解答....

还有就是DWR的Ajax反推功能,我有现成的示例代码。但是对于其中的机制不太明白。我希望有人分析下反推Ajax的机制,不要贴示例代码,我想知道原理。

我谈谈我的一点想法吧,这个消息的目的main.jsp可能和jsessionid有关吧。是不是可以在用户登陆的时候,将用户的sessionid和用户id做成映射放在map中。当一个消息产生时,从map中判断消息接受人是否登陆,登陆了就可以吧消息发送到目的main.jsp。是不是这个目的main.jsp是要靠sessionid来识别??


------解决方案--------------------
“反推”没用过,是可以由服务端直接发起请求至客户端吗..如果可以这样,那在用户登录的时候 把用户的sessionId保存到库,如果定时器刷到 有新消息,则查出用户登录的 sessionId 用那个 所谓的 反推 到页面匹配sessionId 加以显示...

只是思路,不知道行不行,呵呵
帮顶了

要么 就有ajax 页面定时去刷后台吧..不反推
------解决方案--------------------
探讨
我谈谈我的一点想法吧,这个消息的目的main.jsp可能和jsessionid有关吧。是不是可以在用户登陆的时候,将用户的sessionid和用户id做成映射放在map中。当一个消息产生时,从map中判断消息接受人是否登陆,登陆了就可以吧消息发送到目的main.jsp。是不是这个目的main.jsp是要靠sessionid来识别??

------解决方案--------------------
探讨
我做梦都梦到这个帖子,up ,up,up!帮帮我啊..

------解决方案--------------------
我不会DWR 整理下大脑 重新说次

他的意思大概是:访问页面的时候假设出现了新的用户 新的用户将自己的标记发送给服务端 服务端将该用户标记保存到列表中 当有信息到来的时候 将信息发送给客户端(我不知道这步骤怎么做的 一个请求一直没有返回结果 直到有消息的时候才将返回结果并重新再请求一次?) 发送到客户端后 在客户端进行验证 判断这条信息是否属于当前用户 如果不是就不做任何操作
乱了
------解决方案--------------------
探讨
你最核心的思想就是:一定要客户发送请求,服务器才回应一次。
我的想法是:客户登陆,服务器端做标记。这次请求有回应啊,就是用户合法,进入了系统啊。然后,客户端不用去请求,服务器只要受到消息,就直接回应给客户端,并不需要客户端的请求。

不知道DWR内部是如何实现,是不是一定要有客户端的请求呢,我也不解。

------解决方案--------------------
探讨
文摘:
现在,有一个实施:反向Ajax实际上是个幻觉!但是,知识一个故意为之的幻觉,而不是无意义的幻觉。在当前HTTP技术的限制下。根本找不到真正的吧信息从服务器推送到客户端的方式,因为这个协议是无状态的,并且客户端发起的连接一旦断开,服务器就不可能了解客户端。不管到底哪一方发起这个连接,都不存在从客户端到服务器的“持续”连接。
虽然没有真正的推送技术,但是可以完美的模拟它!
。。。。。。有……

------解决方案--------------------
B/S和C/S是有差别的,不要用C/S的方式去想像B/S,除非你不用http协议,

一个比较不错的方法,就是在Client端定时发送ajax请求,因为在B/S下,只能是客户端发起请求。原理明白了,实现就很简单了。
------解决方案--------------------
DWR好像是一秒发一次请求,然后服务器上一直等待.轮询,
CSDN里的左上方消息提示好像是半分钟一次AJAX请求.
你 的QUARTZ根本用不了.在这里
------解决方案--------------------
正在学习中,顶你一下,时刻关注此贴!
------解决方案--------------------
我觉得好像也是这个样子 只能B->S这样走。。。反过来貌似不行的说
觉得短消息那个功能应该都是服务器同步的结果 只不过每次刷新页面的时候都会去服务器端访问一次 看有没有新数据
------解决方案--------------------
DWR跟AJAX的原理是一样的,其实楼主说的反推就是COMET技术!DWR其实就是把简单说来就是AJAX技术的另一种表现(这个的话,你可以好好的阅读下DWR产生的JS文件)让客户端与服务器一直保持连接!如果是让客户端去每次请求刷新,服务器受不了,会容易发生宕机!反之如果让服务器去找断掉的客户端?那根本不可行!所以客户端与服务器一直保持连接,服务器才能找到客户端的请求,进行响应!
------解决方案--------------------
CSDN的消息提醒绝对不会是COMET ,这个局部的会用AJAX实现。COMET一般应用时间很短的交互,耗服务器性能!而且会在一段不短的时间内反复发送请求,如果过快就会像上次youku网的真正的“响应地球一小时”了!