簡體   English   中英

使用websockets聊天應用程序

[英]Chat application using websockets

我已經能夠使用Websockets使用https://github.com/ghedipunk/PHP-Websockets在用戶之間創建聊天應用程序。

當每個用戶連接到套接字時,服務器要做的就是將所有創建的套接字對象變量存儲在一個數組中。 因此,最終他創建了一個數組,該數組具有有關帶有套接字對象的所有用戶的信息。 而且,他每次都會遍歷數組以檢索用戶的對象,以便可以將消息發送到相應的套接字。

這對於少量用戶來說很好。 但是,我們如何處理大量用戶? 我想到了將套接字對象存儲在DB中,但是后來我遇到了: 如何在數據庫中保存php套接字資源?

上面寫着“必須重新創建套接字,並且不能將其存儲在DB中”。

那么,有沒有比重新創建更好的選擇了? 而且,如果我必須重新創建套接字,如何使用PHP-Websockets庫來實現?

提前致謝。

套接字無法保存在磁盤上,因為它是現有連接。 如果銷毀活動對象,則連接將關閉並且用戶將斷開連接。

首先,我想提醒您,內存和CPU可能不是什么大問題。 Node.js解釋器實際上出奇地快,WebSocket對象幾乎不占用太多內存。 您將首先面臨其他問題,例如帶寬問題,打開的連接過多等。

我可能想到的可能的調整:

多線程-產生子進程

不過,您可以在node.js進程之間共享套接字,這在此處進行了描述: https : //nodejs.org/api/child_process.html#child_process_example_sending_server_object

我不能保證這會提高性能,但是它允許您並行處理來自不同用戶的輸入。 我也不知道WebSockets是否支持此功能,但我認為是這樣。

減少套接字開銷

要記住這一點很重要-您不能將套接字對象存儲在磁盤上,但是可以存儲大多數其他內容。 套接字對象幾乎不會占用大量內存,但是如果您存儲有關用戶的其他信息,則可能會降低速度。 冗余信息應存儲在數據庫提供的后端或類似的東西中。

本機核心

如果仍然遇到問題,則可以為聊天編寫C / C ++本機多線程核心,然后讓它執行繁重的操作,例如遍歷套接字並向其發送消息。 將此核心連接到邏輯所在的Node.js服務器。 同樣不是您可以為Node.js編寫本機插件。

使用唯一的user_id或device_id。 例如,會話ID,並將倉庫存儲到數據庫。 然后,在訂閱事件時發送user_id,並且僅將消息發送給該用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM