【问题标题】:Ajax, long-polling, multi users, chat arrivedAjax、长轮询、多用户、聊天到了
【发布时间】:2015-03-05 16:44:16
【问题描述】:

让我们有一个“复杂”的网站,有三个模块:“链接”、“主页”、“聊天”。链接,首页只是一个静态页面,不需要长轮询,它甚至没有启动。但万一“聊天”随时可能有来自其他用户的新消息,我想立即显示它,而不刷新网站。

因此,在“聊天”中启动了长轮询,并且它检测到新的聊天消息到达,因此轮询请求完成并发送“发送 chatbox-div”消息 - 以便该站点可以刷新 DIV .

但是让我们假设三个用户正在观看这个模块。如何注意全部刷新内容?

编辑:我的想象:让某处保存一个标志,表明消息已到达,并且长轮询请求正在监视此标志。如果它发生变化,获取消息并将该标志归零 - 但可能某些用户(某些请求)不会注意到

【问题讨论】:

  • 通过长轮询,客户端定期 使用 AJAX 检查服务器是否有新内容,一旦收到,新内容就会简单地附加到 div .无需刷新页面
  • 我编辑了这个问题,让它更清楚
  • 您有什么理由不希望长轮询自动更新 div 的新内容?似乎更有效率。但是,是的,您可以根据需要创建一个标志。一切皆有可能。

标签: javascript php jquery ajax


【解决方案1】:

塞纳里奥: 一台服务器; N 个客户在同一个 Chanel

服务器为一个通道实现一个Pool;
池配置如下(可以是数组/类/...):
ID(整数/字符串)
=> 如果客户端建立连接,则插入一条新记录,并将由他的 ID 标识
=> 如果客户端断开连接或退出此通道,则此记录将被删除
MESSAGES(String) : 新消息必须连接到已存储在池中的旧消息

客户端每次向服务器发送新消息
1 - 池中的所有 MESSAGES 都将通过新消息的串联未读消息进行更新(发件人除外)

客户端每次向服务器发出请求(使用 Ajax 长池)
1 - 服务器将根据他的 ID 向他发送正确的 MESSAGE
2 - 删除消息

通过这个实现,客户端可以接收到一个空消息,所以在前端你必须做相应的操作

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 2011-07-15
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多