發(fā)送過(guò)來(lái)數(shù)據(jù)是十六進(jìn)制的,workerman不能識(shí)別0x00,遇到就結(jié)束接收了,用bin2hex,但是我用了還是不行,因?yàn)?$message根本就不完整,0x00及后面的數(shù)據(jù)都丟失了。那位大蝦可以指點(diǎn)一二。不想用Base64等加密方法,就是想知道workerman到底能不能做到完美支持十六進(jìn)制的透?jìng)?,還是這本身就是一個(gè)BUG。
首先肯定不是BUG,然后這也是一個(gè)被問(wèn)爛了的問(wèn)題,裸tcp協(xié)議是基于字節(jié)流的本來(lái)就如此,簡(jiǎn)單說(shuō)就是會(huì)有粘包發(fā)生,需要制定應(yīng)用層通訊協(xié)議,具體看手冊(cè)吧: http://doc.workerman.net/protocols/why-protocols.html
服務(wù)端
<?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();
測(cè)試結(jié)果:
客戶(hù)端發(fā)送完整,workeman接收完整,workerman發(fā)送完整,客戶(hù)端接收完整。
估計(jì)是你代碼bug了
謝謝各位,已經(jīng)解決了,是因?yàn)榘^數(shù)據(jù)長(zhǎng)度錯(cuò)了,改過(guò)來(lái)就正常了