繁体   English   中英

存储聊天应用程序的“在线用户”列表(php / ajax)

[英]Storing a “Users Online” list for a chat application (php/ajax)

我有几个聊天室。 目前,我将聊天用户列表存储在php变量中。 如果用户进入或离开房间,则会在该列表中添加/删除用户的名称。 为了使该存储持久化,我使用了memcached。 为了更新聊天室的状态并将用户列表发送给聊天室中的所有用户,我使用了周期性的ajax请求,这些请求将用户列表提取到聊天用户的浏览器中。

还行吧 但是我怀疑每隔XX秒将整个聊天用户列表发送给所有人是否是一个好主意,如果聊天中有数百人。

聊天室通常如何处理此问题?

不知道它们的工作方式,但是这里有一些方法。 记住在优化前后要进行测量。

  • 版本列表。 如果您有最新版本,请不要获取完整列表。
  • 比较列表。 仅发送自上次更新以来的更新。
  • 记录此列表。 在发生新事件时缓存或推送更新。

在运行聊天室的方式中,我给所有新消息以及新的登录和注销添加了时间戳。

当用户进入房间时,我将下载完整列表。 定期(通过带有JSON调用的AJAX),我将下载所有新事件(消息,登录和注销)。 并相应地更新相关列表。

可以将数据从服务器推送到客户端(http://stackoverflow.com/questions/19995/is-there-somere-way-push-data-from-web-server-to-browser)。 但是,如果您仍然想进行轮询,则可以实现类似于HTTP 304响应的方法。

老实说,你在做什么听起来不错。 保持你在做什么。 也许跟踪最后一个列表,并且仅在最近x次更改后才发送更新? 如果您真的要保存几个字节。

我也会通过聊天消息通过的相同渠道推送列表更新。 如果是无休止的加载页面,也许您可​​以在页面中注入如下内容:

<script>updateUserlist({user:"alice", eventtype:"leave"});</script>

感谢所有的建议。 此外,我将研究运行彗星服务器。 长轮询方法无法很好地扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM