我做的系统中需要实现一个消息发送和接受功能。类似于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来识别??
用DWR里面有一个变量scriptsession存储相关信息,相当于你的map,先从服务器取得scriptsession ,再对其中你存储的变量做相关操作。2.0里面是这样的,后面的版本没有去看过了。
反推 我不知道有没有这个词 我比较在意你说的一点 就是
问题在于,怎样推将消息推送到目的客户端。比如客户的main.jsp是目的地
实际上并没有反推这一说 都是客户端不停的请求后台 查询是否有新的记录 如果有 就返回 主动方不可能会是服务端
乱了
我的想法是:客户登陆,服务器端做标记。这次请求有回应啊,就是用户合法,进入了系统啊。然后,客户端不用去请求,服务器只要受到消息,就直接回应给客户端,并不需要客户端的请求。不知道DWR内部是如何实现,是不是一定要有客户端的请求呢,我也不解。
现在,有一个实施:反向Ajax实际上是个幻觉!但是,知识一个故意为之的幻觉,而不是无意义的幻觉。在当前HTTP技术的限制下。根本找不到真正的吧信息从服务器推送到客户端的方式,因为这个协议是无状态的,并且客户端发起的连接一旦断开,服务器就不可能了解客户端。不管到底哪一方发起这个连接,都不存在从客户端到服务器的“持续”连接。
虽然没有真正的推送技术,但是可以完美的模拟它!
有三种DWR支持的技术可以辅助完成这种技术.....
幻觉???既然它能封装出这种幻觉,你就研究下吧。到时候分享哦..上面我没把描述清楚吗?
“
我的想法是:客户登陆,服务器端做标记。这次请求有回应啊,就是用户合法,进入了系统啊。然后,客户端不用去请求,服务器只要受到消息,就直接回应给客户端,并不需要客户端的请求。”既然是 main.jsp 是所有用户登录后的目的地。且不同用户登录后都是显示各自的信息..我们在用户登录时就在后台保存好每个用户ID对应的 session标识(sessionId)。这样 不管哪个用户有新消息,都可以通过userId查找到 最新登录时那个session。再反推至 main.jsp。在页面匹配sessionID 相同的话 就可提示了...
CSDN里的左上方消息提示好像是半分钟一次AJAX请求.
你 的QUARTZ根本用不了.在这里
觉得短消息那个功能应该都是服务器同步的结果 只不过每次刷新页面的时候都会去服务器端访问一次 看有没有新数据
,还是要用ajax再次请求?