如果可以的话,客户端websocket那里接受到返回数据,如何来解析序列化的数据呢
workerman可以用protobuffer,客户端如何解析protobuffer这个要看什么客户端,一般去protobuffer主页下载个对应的库就行了。
另外既然用websocket协议了,就没必要用protobuffer了,不知道你在websocket协议上传输protobuffer的初衷是什么?
哦哦 刚接触到protobuffer 说是比较省空间,效率高,就想着那个workerman的聊天的应用用protobuf来传输数据
protobuf的序列化和反序列化不错啊。在websocket上难道不需要用这个吗?
在websocket上传输json更通用一些,调试也更方便一些。
用protocol buffer 跟快啊,所以想在wm使用
快0.00001秒没有什么太大意义。另外最好压测下php的json 和 protobuffer到底哪个快,php下还真不一定protocol buffer比json快。
下面有脚本,先压测下到底快多少,再用也不迟。
<?php $count = 1000000; $data = ; $time_start = microtime(true); for ($i=$count; $i>0; $i--) { $json = json_encode($data); $tmp = json_decode($json); } echo ceil($count/(microtime(true)-$time_start)), "/S\n";
我的笔记本上执行结果为 1125994/S,也就是执行一次 json_encode+json_decode 大概耗时0.0000009秒,这个速度大多数情况下足够用了,从速度上讲没必要过度优化。 如果有兴趣可以压测下protocol buffer看下速度有多快,欢迎将对比结果贴在下面。
<?php require_once __DIR__ . '/vendor/autoload.php'; $count = 1000000; $data = ; $time_start = microtime(true); $test = new \Protocols\Test(); $encode = function ($data) use ($test) { $test->setData($data); return $test->serializeToString(); }; $decode = function ($bin_data) use ($test) { $test->mergeFromString($bin_data); return $test->getData(); }; for ($i=$count; $i>0; $i--) { $bin_data = $encode($data); $tmp = $decode($bin_data); } echo ceil($count/(microtime(true)-$time_start)), "/S\n";
ubuntu@DESKTOP-Q7K4DU0 ~/Desktop/myFirstGame $ protoc --version libprotoc 3.6.0 ubuntu@DESKTOP-Q7K4DU0 ~/Desktop/myFirstGame $ php test_protobuf.php 626678/S ubuntu@DESKTOP-Q7K4DU0 ~/Desktop/myFirstGame $
protobuf居然慢了这么多,不科学呀,可能使用姿势不对
请问,你的这台机器 json_encode json_decode多少?
@1393:ubuntu@DESKTOP-Q7K4DU0 ~/Desktop/myFirstGame $ php test_json.php 1535519/S
这么看来php下protobuf不一定比json快
如果是客户端js传输protobuffer 二进制流数据的话,workerman中websocket协议下如何接收呢?官方的例子是$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER,打印结果部分显示,但是数据流原样返回,客户端js解析后却是空的,若主动推二进制流数据给客户端能解析出数据来,这说明数据在接收时就不完整了,如何能获得完整的二进制流数据呢
新问题请发新的帖子。配合上详细的代码和结果截图,不然无法定位
workerman可以用protobuffer,客户端如何解析protobuffer这个要看什么客户端,一般去protobuffer主页下载个对应的库就行了。
另外既然用websocket协议了,就没必要用protobuffer了,不知道你在websocket协议上传输protobuffer的初衷是什么?
哦哦 刚接触到protobuffer 说是比较省空间,效率高,就想着那个workerman的聊天的应用用protobuf来传输数据
protobuf的序列化和反序列化不错啊。在websocket上难道不需要用这个吗?
在websocket上传输json更通用一些,调试也更方便一些。
用protocol buffer 跟快啊,所以想在wm使用
快0.00001秒没有什么太大意义。另外最好压测下php的json 和 protobuffer到底哪个快,php下还真不一定protocol buffer比json快。
下面有脚本,先压测下到底快多少,再用也不迟。
我的笔记本上执行结果为 1125994/S,也就是执行一次 json_encode+json_decode 大概耗时0.0000009秒,这个速度大多数情况下足够用了,从速度上讲没必要过度优化。
如果有兴趣可以压测下protocol buffer看下速度有多快,欢迎将对比结果贴在下面。
protobuf居然慢了这么多,不科学呀,可能使用姿势不对
请问,你的这台机器 json_encode json_decode多少?
@1393:ubuntu@DESKTOP-Q7K4DU0 ~/Desktop/myFirstGame $ php test_json.php
1535519/S
这么看来php下protobuf不一定比json快
如果是客户端js传输protobuffer 二进制流数据的话,workerman中websocket协议下如何接收呢?官方的例子是$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER,打印结果部分显示,但是数据流原样返回,客户端js解析后却是空的,若主动推二进制流数据给客户端能解析出数据来,这说明数据在接收时就不完整了,如何能获得完整的二进制流数据呢
新问题请发新的帖子。配合上详细的代码和结果截图,不然无法定位