你好,我想请教下关于数据压缩处理。

ldldld

你好,本人正在使用workerman 的gateway尝试制作小型联机游戏。

但是发现仅10人左右同房间在线,gateway每秒10次转发同步数据给客户端,我的服务器里的gateway就达到了每秒300KB/s的上传速度。

这样子太吃带宽了。

我想知道有办法让gateway支持gzip压缩传进和传出数据吗?

谢谢版主大大。

3120 2 0
2个回答

walkor

带宽占用多少和业务有关:
占用多少带宽实际上和框架没有直接关系,和业务通讯量及每个包的大小有关。
300KB/S,10人在线,假设同一秒10人给10人广播,那么是10*10=100次通讯,每个通讯包要3kB大小才能达到300KB/S。
如果上面计算无误的话,你每次通讯的数据包确实太大了,可以从业务上考虑是否需要每次传输这么大的数据包。

gzip压缩:
gateway实际上不关心传输的是什么数据,文本数据、二进制数据、gzip压缩都可以。
比较简单的方法是gateway用http://doc.workerman.net/315308(客户端需要能解析frame协议),发送数据前把数据自己用gzip压缩下然后调用Gateway::sendXXX给客户端就行了。注意使用gizip压缩还需要考虑客户端是否能够gzip解压缩。

frame说明:
http://doc.workerman.net/315308,包头是4字节网络字节序int代表整个包长,包体是任意数据(可以是二进制或者gzip压缩数据)。

  • 暂无评论
ldldld

谢谢walkor大,加了gzip解决了,数据现在压到了30KB/s。

留点思路给后来人:
改协议的话直接修改text的结构会报错,方便的办法是把frame照着text改,然后再在encode里加上gzip的代码即可。

  • 暂无评论
年代过于久远,无法发表回答
🔝