簡體   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