2018-07-25 IO类H5小游戏Websocket使用二进

2018-07-25  本文已影响0人  编程改变世界

之前几个小游戏项目都是以JSON进行传输,这回做IO类游戏,同房间超过30人后客户端在运行一会后运行越来越慢,经各方面排查最终发现:使用JSON传输数据量传输导致数据量大增(每秒20K),从而影响了游戏的运行速度。于是着手将JSON改为二进制传输。

服务器端用的是PHP的Workerman,这个开源框架十分好用,几个项目下来也非常稳定。 PHP有pack和unpack可作为二进制的封包和解包。但经过测试,发现服务器向客户端发送数据时总会导致客户端断线。由于开始并不知道是哪里引起的问题,所以排查了半天,后来终于发现是因为Workerman的默认设置而引起。

Workerman默认的传输格式是UTF,也就是:

$connection->websocketType = Websocket::BINARY_TYPE_BLOB;

看了文档如下设置:

$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;

设置好后重启服务果然好了。

我将游戏核心传输部分改为二进制数据传输,而90%的命令仍然以JSON传输,这样游戏的修改工作量大大降低,而且JSON确实也很好用。这样即解决了游戏过程大量的数据传输,又保留了大量JSON的易用性。

上一篇下一篇

猜你喜欢

热点阅读