你好,本人正在使用workerman 的gateway嘗試制作小型聯(lián)機(jī)游戲。
但是發(fā)現(xiàn)僅10人左右同房間在線,gateway每秒10次轉(zhuǎn)發(fā)同步數(shù)據(jù)給客戶端,我的服務(wù)器里的gateway就達(dá)到了每秒300KB/s的上傳速度。
這樣子太吃帶寬了。
我想知道有辦法讓gateway支持gzip壓縮傳進(jìn)和傳出數(shù)據(jù)嗎?
謝謝版主大大。
帶寬占用多少和業(yè)務(wù)有關(guān):
占用多少帶寬實(shí)際上和框架沒有直接關(guān)系,和業(yè)務(wù)通訊量及每個(gè)包的大小有關(guān)。
300KB/S,10人在線,假設(shè)同一秒10人給10人廣播,那么是10*10=100次通訊,每個(gè)通訊包要3kB大小才能達(dá)到300KB/S。
如果上面計(jì)算無誤的話,你每次通訊的數(shù)據(jù)包確實(shí)太大了,可以從業(yè)務(wù)上考慮是否需要每次傳輸這么大的數(shù)據(jù)包。
gzip壓縮:
gateway實(shí)際上不關(guān)心傳輸?shù)氖鞘裁磾?shù)據(jù),文本數(shù)據(jù)、二進(jìn)制數(shù)據(jù)、gzip壓縮都可以。
比較簡(jiǎn)單的方法是gateway用http://doc.workerman.net/315308(客戶端需要能解析frame協(xié)議),發(fā)送數(shù)據(jù)前把數(shù)據(jù)自己用gzip壓縮下然后調(diào)用Gateway::sendXXX給客戶端就行了。注意使用gizip壓縮還需要考慮客戶端是否能夠gzip解壓縮。
謝謝walkor大,加了gzip解決了,數(shù)據(jù)現(xiàn)在壓到了30KB/s。
留點(diǎn)思路給后來人:
改協(xié)議的話直接修改text的結(jié)構(gòu)會(huì)報(bào)錯(cuò),方便的辦法是把frame照著text改,然后再在encode里加上gzip的代碼即可。