我有几个聊天室。目前,我将聊天用户列表存储在php变量中。如果用户进入或离开房间,则从该列表中添加/删除用户的姓名。 为了使这个存储持久化,我使用memcached。要更新聊天室的状态并将用户列表发送给聊天室中的所有用户,我会使用定期的ajax请求将用户列表提取到聊天中的用户的浏览器中。
没关系。但我怀疑,如果聊天中有几百人,那么每隔XX秒向所有人发送聊天用户的清单是个好主意。
聊天室通常如何处理这个问题?
答案 0 :(得分:2)
不知道他们是怎么做的,但这里有一些方法可以。请记住在优化之前和之后进行测量。
答案 1 :(得分:1)
我运行聊天室的方式,我为所有新邮件和新签到并签名加盖时间戳。
当用户进入房间时,我会下载完整列表。 我会定期(通过带有JSON调用的AJAX)下载任何新事件(消息,登录和注销)。并相应地更新相关列表。
答案 2 :(得分:1)
可以将数据从服务器推送到客户端(http://stackoverflow.com/questions/19995/is-there-some-way-to-push-data-from-web-server-to-browser) 。但是,如果您仍想进行轮询,我会实现类似于HTTP 304响应的内容。
答案 3 :(得分:0)
答案 4 :(得分:0)
我会通过聊天消息所经过的同一频道推送列表更新。如果它是一个无限加载的页面,也许你可以在页面中注入这样的东西:
<script>updateUserlist({user:"alice", eventtype:"leave"});</script>
答案 5 :(得分:0)
感谢所有建议。另外,我将研究运行彗星服务器。 长轮询方法不能很好地扩展。