2010-03-19 100 views
3

我正在爲一家公司構建聊天系統,我想知道構建系統的最佳方式是什麼?可擴展的基於PHP(基於AJAX)的聊天系統的最佳方法

當前的設置,我們擁有的是PHP和Memcacheq一個Nginx的HTTP服務器(作爲附加聊天消息發送到用戶自己的隊列中的消息隊列)。然後我們輪詢Nginx服務器(通過Comet風格的請求)並查詢消息隊列的更新。

是否使用消息隊列,如Memcacheq來處理既有用戶到用戶和站點範圍內的聊天或者是它最好只是堅持MySQL的聊天系統是一個好主意?

謝謝!

回答

1

我期望Memcacheq能夠比MySQL更好地執行。當你有幾分陳舊的數據(或壞的數據庫設計,增加查詢執行時間)

3

Memcache的纔有用。在你的情況下(聊天系統),數據將是新鮮的,添加Memcache只會使我看到的東西複雜化(讀取性能降低)。將memcache看作mysql和php之間的中間件(在RAM上)。如果數據已過時,那麼行程時間會減少,因爲PHP不必去mysql,但在新數據的情況下,負載實際上會增加(因爲memcache也需要從PHP獲取更改)。

總之,我不會建議使用內存緩存的聊天系統。會推薦更多地搜索網頁。好的帖子在http://blog.tech.stylefeeder.com/2008/08/22/memcached-vs-mysql/

+0

是否使用MemcacheQ而不僅僅是常規的Memcache設置有什麼不同?我現在看看那個頁面 - 謝謝! – Simon 2010-03-19 10:15:36

+0

據我所知,MemcacheQ只是提供排隊功能的memcache的一個包裝。不應該有任何區別。 – pinaki 2010-03-19 10:47:49

+0

如果發生聊天消息,請將其存儲在mysql中並進行緩存。那麼在閱讀側查詢應該從chache讀取值。 ? – 2012-01-09 18:32:56

1

Memcacheq是一個偉大的工具,它可以幫助避免網絡requsts的延遲。 它可以充當php和mysql之間的緩衝區,但它不是mysql的替代品。 Memcacheq還可以使擴展更容易,因爲可能會有多個分佈式消息使用者。

我建議把它放在高負載的php請求之間,將數據保存到mysql並執行耗時的操作。這將加快用戶的頁面加載速度,並將免除您的Web服務器長時間的請求。

Memcacheq非常快。它不會花費太多資源的開發

+0

目前工作的方式是所有的聊天消息都存儲在MySQL表中,但在發送消息的時候,關於數據庫條目的信息被輸入到特定的Memcache消息隊列中並傳送給用戶幾乎是實時的。這似乎是一種比持續輪詢數據庫更新更有效的方法。 感謝您的想法! – Simon 2010-03-19 23:48:19

0

試試這個:http://pushmodule.slact.net/。 Nginx會照顧到彗星的東西,你所有的php應用程序需要做的就是向模塊發送HTTP請求。