两百分请教一个巨难的WEBIM问题!!!!

skyaspnet 2010-10-22 11:33:08

不知道大家用没用过校内,并且留意过底部分的工具条,这个工具条包括有好友聊天等很多功能,

有个这样的问题,同时打开好几个页面,每个页面下都有工具条,在某一个页面和好友聊天时,

或者其他的一些操作都会在每一个打开的页面出现,也就是说,我在A页面发送了聊天记录,

B,C 页面的聊天对话框也会出现这样的操作,接收消息也是同样的感觉,

给人的感觉就好像是所有的页面共用一个工具条,

但是事实上每个页面是独立的,那么,接收聊天信息时每个页面都会接收到,如果原理是类似于AJAX

轮询的话,那么有一个页面接收到消息后就会删除,其他页面如果有延迟的话就无法接收到,但是事实上

每个页面都接收到了,这是如何实现的呢?一般来说,消息接收到后就会删除,但是却没有发生这样的事情,

很多疑惑,期待大侠解答,如果能得到完整的解答,两百分悉数奉上!!

非常感谢!!!
...全文
216 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyaspnet 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 cj205 的回复:]
呵呵~你的等级只能发100分的帖子
帖子加分是有上限的
不然别人要升双星干嘛呢。就是为了发300分的帖子啊~
[/Quote]

嗯,不好意思啊,现在结帖
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
呵呵~你的等级只能发100分的帖子
帖子加分是有上限的
不然别人要升双星干嘛呢。就是为了发300分的帖子啊~
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复

该帖已达到分数最大值,不允许加分操作。

汗,这是怎么回事?
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 cj205 的回复:]

有区别的
1、服务器无论如何不会彻底删除数据的,tag = isRead,isDelete==
2、多个窗口同时进行时 第一次加载页面的时候是根据tag = unread的来接受数据
之后每次请求都是根据窗口里最后一条消息的id来请求,这个时候不去管是isRead还是isDelete。只取窗口回馈的ID后面的消息
[/Quote]

嗯,这样解释基本上就明白了,基本上上次使用校内WEBIM的多窗口聊天的问题都能解释了,非常感谢,我现在给帖子加分
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
有区别的
1、服务器无论如何不会彻底删除数据的,tag = isRead,isDelete==
2、多个窗口同时进行时 第一次加载页面的时候是根据tag = unread的来接受数据
之后每次请求都是根据窗口里最后一条消息的id来请求,这个时候不去管是isRead还是isDelete。只取窗口回馈的ID后面的消息

skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 cj205 的回复:]
服务器不需要保存最后一次交互的ID
但是数据里有tag,确定接受的数据下次打开时不发送,否则都发到前台去(即使上次发送了,但是没有客户端反馈确认)。每次客户端发送的时候都会发一个ID,服务器根据这个ID来进行交互
[/Quote]

晕,又糊涂了,这样的话,和接收删除消息没有什么区别了啊,当打开多个浏览器窗口时,汗
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
服务器不需要保存最后一次交互的ID
但是数据里有tag,确定接受的数据下次打开时不发送,否则都发到前台去(即使上次发送了,但是没有客户端反馈确认)。每次客户端发送的时候都会发一个ID,服务器根据这个ID来进行交互
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
再请教一下,每个浏览器窗口初始化时,应该先是从例如FLASH推送数据来生确保下次客户端请求时能够发送正确的ID值吧?那么,服务器端肯定需要保存最后一次交互的ID

感谢CJ205,原理基本上明白了,多谢!
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
也就是说其中某一个窗口的ID如果大了或者是小了(因为时间有先后),通过数据的一些发送,基本上能保持一致
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 skyaspnet 的回复:]

引用 18 楼 cj205 的回复:
为什么要这样保存ID值呢。打开的一个页面就代表一个客户端。
那么每个客户端于服务器的请求都是独立的~(哪怕是隐藏控件也没问题啊)


关键问题在于,如何能保证各个浏览器窗口的ID值同步?
[/Quote]
每个窗口都会请求server对吧
server的数据的确定的对吧
窗口发任何一个ID,返回的数据都是从ID到最新的数据对吧
那么窗口不就同步了吗
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
校内的WEBIM每个浏览器窗口接收消息都是同步的,不会出现某一个窗口多了或者是少了记录
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cj205 的回复:]
为什么要这样保存ID值呢。打开的一个页面就代表一个客户端。
那么每个客户端于服务器的请求都是独立的~(哪怕是隐藏控件也没问题啊)
[/Quote]

关键问题在于,如何能保证各个浏览器窗口的ID值同步?
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
为什么要这样保存ID值呢。打开的一个页面就代表一个客户端。
那么每个客户端于服务器的请求都是独立的~(哪怕是隐藏控件也没问题啊)
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 cj205 的回复:]
我刚才也阐述了这个问题了~~呵呵
[/Quote]

多个浏览器估计需要用COOKIE来保存ID值,还有更好的方法吗?
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
我刚才也阐述了这个问题了~~呵呵
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
下次不是根据这个ID来进行消息发送
而是再次发送请求的时候附加最后一个ID(可能是多个浏览器)
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
突然发现有个问题并没有说清楚,就是当我开了多个浏览器窗口,如何实现每个窗口里的聊天数据都是同步的?毕竟时间总是有先有后的,如何能保证最后的ID值能够正确传输?写COOKIE?
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
嗯,这种机制应该是比较合适的,估计聊天记录也不会保存太久,像WEB聊天记录基本上都是不保存的
Mr-Jee 2010-10-25
  • 打赏
  • 举报
回复
未尝不可~~~
具体的实现我觉得完全是看机制的选择。

下次不是根据这个ID来进行消息发送
而是再次发送请求的时候附加最后一个ID(可能是多个浏览器)
skyaspnet 2010-10-25
  • 打赏
  • 举报
回复
也就是说可能会返回一条信息,告诉服务器端,我最后收到的ID是多少,然后下次再根据这个ID来进行消息的发送?
加载更多回复(9)

52,792

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧