[英]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.