我正在尝试创建一个内联聊天。当我的网站的两个窗口打开时,问题就来了。因为然后我的脚本将新消息发送到请求它的窗口(目前我正在使用简单的轮询,稍后将移至彗星)。
有没有我没有想到的好技术,以便我可以向两个浏览器窗口发送消息?目前我正在使用一个读取标志,所以一旦消息被传递到一个窗口,它就会被标记为已读。因此永远不会被传递到另一个窗口。我该如何解决这个问题?
感谢您的时间。
我正在尝试创建一个内联聊天。当我的网站的两个窗口打开时,问题就来了。因为然后我的脚本将新消息发送到请求它的窗口(目前我正在使用简单的轮询,稍后将移至彗星)。
有没有我没有想到的好技术,以便我可以向两个浏览器窗口发送消息?目前我正在使用一个读取标志,所以一旦消息被传递到一个窗口,它就会被标记为已读。因此永远不会被传递到另一个窗口。我该如何解决这个问题?
感谢您的时间。
我能想到的一件事是在消息上使用某种时间戳,而不是“读取”标志。
这样,当对新消息的页面请求(并且我假设你正在使用某种时间来汇集服务器以获取新消息)发送它获得的最后一个时间戳时,然后服务器在之后发回所有消息那一点。
每个窗口都需要是一个单独的“订阅者”,服务器需要将消息发送给每个订阅者。因此,每个订阅者都需要一个“读取”标志,而不是一个“读取”标志。
不幸的是,这意味着为每个订阅者创建一个订阅者管理器,以及一种知道订阅者何时消失的方法——也许当订阅者停止轮询一分钟时。
在“四人帮”一书中查找“观察者”模式(也称为“发布-订阅”)(Gamma、Helm、Johnson 和 Vlissides 的“设计模式:可重用的面向对象软件的元素”,ISBN 0-201 -633610-2) 或在线。