首先謝謝站長提供了如此優(yōu)秀方便的通信框架,非常感謝您的無私分享精神!由衷的為國產(chǎn)能有如此優(yōu)秀的php框架感到驕傲。
最近在做一個項目,我剛好看到了workerman,想請教下,使用哪種搭配更合理
項目是一個類似主播需求的群聊應(yīng)用,有多聊天室共同存在,服務(wù)器會有很多信息推送給各個房間,用戶交互非常頻繁! 不記錄歷史消息,新用戶進入會讀取最近10條聊天記錄。 有群聊、表情功能,沒有好友,傳輸文件,以及視頻,音頻等需求! 預計同時在線人數(shù) 2000-5000人
詳細的看了下,LayChat 感覺太重了點,美麗播視頻直播系統(tǒng) 和需求不太符合,
想自己搭建一套,預備使用
PHPSocket.IO 通信 + redis存儲聊天、房間數(shù)據(jù) + thinkphp 來搭建,心里有點沒底,所以想問下大家,我這個搭配有沒有啥問題? 謝謝大家了。。
5000人在線,用單進程workerman直接做就好啦,最近10條消息也不用存redis,直接在workerman里弄個全局數(shù)組存一下就好了,性能棒棒滴。
還有thinkphp也用不到
大俠,如果聊天信息非常多,全局數(shù)組靠譜么。。。而且也不好搞啊,,比如我有30個聊天室和各種群,您確定數(shù)組就能搞定么。。。。。。
我覺得沒問題啊,假設(shè)你有1000個群組,每個存最近10條消息,每條消息平均100個漢字,每個漢字3字節(jié)。
那就是 100010100*3 字節(jié)=3000000字節(jié)=3M的數(shù)據(jù),毫無壓力啊
你這種想法是錯的,內(nèi)容本身只占3M,但維護內(nèi)容的數(shù)據(jù)結(jié)構(gòu)也要額外占內(nèi)存的。當你把一個 $str 變量中的字符串增加了 3000000字節(jié),那么內(nèi)存增加 3M 這個正確,但很多條消息,會散在數(shù)據(jù)的不同鍵值中,而且可能會有額外的結(jié)構(gòu)來維護關(guān)系,消耗的內(nèi)存遠大于3M。
順便追問下,workerman-chat 大量使用了session來保存用戶狀態(tài),這樣簡單是簡單了,但是會不會導致內(nèi)存之類的消耗得很夸張。。。
session里不存很大的數(shù)據(jù)就沒事吧,每個session存?zhèn)€幾M數(shù)據(jù),那肯定有問題。
存?zhèn)€幾K沒啥事,2000*5k才10M內(nèi)存。