用memcache 來實現聊天室的可能性探討.
突然想起這麼個話題,當然要做複雜的是肯定不行的,我們只探討將文本通過memcache實現聊天應用的可能..
首先擺在我們面前的是這個key要怎麼維護?有沒有實現的可能?
------解決方案--------------------
由於需要記錄聊天內容和聊天人的資訊
所以每筆資料應該是一個“結構”而不是單一的值
鑒於聊天內容是不可修改的,所以 key 並無實際意義,遞增即可
至多是取時間值
------解決方案--------------------
聊天室需要緩衝的東西不是很多啊。
------解決方案--------------------
研究過python的聊天室...關注一下
------解決方案--------------------
進來學習,這一塊沒什麼經驗。
------解決方案--------------------
本來聊天室就是個蛋疼的功能。得耗費多少資本啊。
沒有這方面的經驗,實現的方法有多種。把聊天資料存資料庫或本地檔案或memcache,顯示資料會用到推送。聽說還可以用socket來實現。 也沒測試過。不知道哪種效率高。
------解決方案--------------------
探討
本來聊天室就是個蛋疼的功能。得耗費多少資本啊。
沒有這方面的經驗,實現的方法有多種。把聊天資料存資料庫或本地檔案或memcache,顯示資料會用到推送。聽說還可以用socket來實現。 也沒測試過。不知道哪種效率高。
------解決方案--------------------
雖然不懂web, 但是跑fcgi做單獨的聊天伺服器是可行的.
------解決方案--------------------
探討
引用:
本來聊天室就是個蛋疼的功能。得耗費多少資本啊。
沒有這方面的經驗,實現的方法有多種。把聊天資料存資料庫或本地檔案或memcache,顯示資料會用到推送。聽說還可以用socket來實現。 也沒測試過。不知道哪種效率高。
用websocket做長串連是很不錯的!
------解決方案--------------------
探討
雖然不懂web, 但是跑fcgi做單獨的聊天伺服器是可行的.
------解決方案--------------------
除非瀏覽器或flash本身是伺服器時,如有開放連接埠,推技術才可能成真。
http是要求-回應式的。 是要是uri,都可請求。
猜想QQ, 每個使用者都有好友的連接埠中。
也是有兩種方式實現: 一是有資料存中央資料庫;二是一個使用者發言,然後向群裡廣播。
------解決方案--------------------
memcached的替代品?
redis吧,資料放入記憶體,但也支援在硬碟上持久化儲存,配置正常的情況下,效能大概是memcached的十倍(網上的資料,俺自己測沒打到過,但5倍以上是確認的)。
另外,做聊天室是可行的,並且也有類似的代碼, redis官網有個樣本,是完全用redis來做的模仿twiiter的頁面。project名稱好像叫“retwis”
以前也看到過設計,一般key是用散列值即可吧,比如 使用者名稱_時間 然後md5一下之類的...
------解決方案--------------------
探討
除非瀏覽器或flash本身是伺服器時,如有開放連接埠,推技術才可能成真。
http是要求-回應式的。 是要是uri,都可請求。
猜想QQ, 每個使用者都有好友的連接埠中。
也是有兩種方式實現: 一是有資料存中央資料庫;二是一個使用者發言,然後向群裡廣播。
------解決方案--------------------
時間戳記做key
由於mem 的value值是有大小限制的
可以每過一段時間產生個key 然後內部是json格式
例如
每五分鐘一個key
然後把這五分鐘內的聊天記錄都放到mem中
然後 使用者登入根據當前的時間戳記來查詢
不知道可否
------解決方案--------------------
呃,好吧,從目前的經驗來看,如果單台伺服器來做的話,私以為用長串連是不合適的,短串連做聊天室能夠實現更多的訪問量。
假設一台16核心16G的伺服器,Nginx + PHP-FCGI的話,大概可靠並發能達到3W,那麼長串連,最多也就是3W使用者嘍?(3W是俺自己測試的情況,俺渣....不過另外也參考了張宴的blog,姑且國內nginx的先驅者吧) 但短串連的話,就看Nginx每秒最多的request和 後端儲存每秒最多request的能力了
以下是nginx和redis的單獨 request能力 測試:
nginx,以phpinfo.php為測試內容
PHP code
./webbench -c 10000 -t 30 "http://127.0.0.1/test.php"Webbench - Simple Web Benchmark 1.5Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.Benchmarking: GET http://127.0.0.1/test.php10000 clients, running 30 sec.Speed=230470 pages/min, 46263036 bytes/sec.Requests: 115235 susceed, 0 failed.
------解決方案--------------------
沒搞 過這方面,,表示很有壓力。。
探討
呃,好吧,從目前的經驗來看,如果單台伺服器來做的話,私以為用長串連是不合適的,短串連做聊天室能夠實現更多的訪問量。