你好,本人正在使用workerman 的gateway尝试制作小型联机游戏。
但是发现仅10人左右同房间在线,gateway每秒10次转发同步数据给客户端,我的服务器里的gateway就达到了每秒300KB/s的上传速度。
这样子太吃带宽了。
我想知道有办法让gateway支持gzip压缩传进和传出数据吗?
谢谢版主大大。
带宽占用多少和业务有关: 占用多少带宽实际上和框架没有直接关系,和业务通讯量及每个包的大小有关。 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压缩数据)。
谢谢walkor大,加了gzip解决了,数据现在压到了30KB/s。
留点思路给后来人: 改协议的话直接修改text的结构会报错,方便的办法是把frame照着text改,然后再在encode里加上gzip的代码即可。
带宽占用多少和业务有关:
占用多少带宽实际上和框架没有直接关系,和业务通讯量及每个包的大小有关。
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压缩数据)。
谢谢walkor大,加了gzip解决了,数据现在压到了30KB/s。
留点思路给后来人:
改协议的话直接修改text的结构会报错,方便的办法是把frame照着text改,然后再在encode里加上gzip的代码即可。