发送过来数据是十六进制的,workerman不能识别0x00,遇到就结束接收了,用bin2hex,但是我用了还是不行,因为 $message根本就不完整,0x00及后面的数据都丢失了。那位大虾可以指点一二。不想用Base64等加密方法,就是想知道workerman到底能不能做到完美支持十六进制的透传,还是这本身就是一个BUG。
首先肯定不是BUG,然后这也是一个被问烂了的问题,裸tcp协议是基于字节流的本来就如此,简单说就是会有粘包发生,需要制定应用层通讯协议,具体看手册吧: http://doc.workerman.net/protocols/why-protocols.html
服务端
<?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; $worker = new Worker('tcp://0.0.0.0:1238'); $worker->onMessage = function($connection, $data) { $connection->send($data); }; Worker::runAll();
测试结果:
客户端发送完整,workeman接收完整,workerman发送完整,客户端接收完整。 估计是你代码bug了
发上来看看你的解包协议?
谢谢各位,已经解决了,是因为包头数据长度错了,改过来就正常了
首先肯定不是BUG,然后这也是一个被问烂了的问题,裸tcp协议是基于字节流的本来就如此,简单说就是会有粘包发生,需要制定应用层通讯协议,具体看手册吧: http://doc.workerman.net/protocols/why-protocols.html
服务端
测试结果:
客户端发送完整,workeman接收完整,workerman发送完整,客户端接收完整。
估计是你代码bug了
发上来看看你的解包协议?
谢谢各位,已经解决了,是因为包头数据长度错了,改过来就正常了