让我们拥有一个复杂的"网站,有三个模块:"链接","家庭","聊天"。链接,家里只是一个类似静态的页面,不需要长时间轮询,它甚至没有开始。但是如果"聊天"任何时候新消息可能从其他用户到达,我想立即显示它,而不刷新网站。
所以,在"聊天"启动了长轮询,它检测到新的聊天消息到达,因此轮询请求结束并发送"发送chatbox-div"消息 - 以便该站点可以刷新DIV。
但是让我们想象现在有三个用户正在观看这个模块。如何注意所有这些内容以刷新内容?
编辑:我的想象:让某处保存一个标志,表明消息已到达,并且长轮询请求正在观看此标志。如果它改变了,得到消息,并将该标志归零 - 但随后可能有些用户(某些请求)不会注意到
答案 0 :(得分:1)
Senario: 一台服务器; N个客户在同一个香奈儿
服务器为一个chanel实现一个池;
池配置如下(它可以是数组/类/ ...):
ID (整数/字符串)
=>如果客户端建立了连接,则会插入新记录,并且将通过其ID来识别
=>如果客户端断开连接或退出此chanel,则此记录将被删除
MESSAGES (字符串):新邮件必须连接到已存储在池中的旧邮件
客户端每次向服务器发送新消息时
1 - 池中的所有消息都将通过新的连接未读消息进行更新(发件人除外)
客户端每次向服务器发出请求(使用Ajax Long Pooling)
1 - 服务器将根据他的身份证明给他正确的消息
2 - 删除留言
通过此实现,客户端可以收到空消息,因此在前端您必须执行相应的操作