websocket傳輸二進(jìn)制要怎么設(shè)置協(xié)議頭的一個(gè)標(biāo)記位
websocket協(xié)議中在協(xié)議頭中使用一個(gè)標(biāo)記位來(lái)標(biāo)記傳輸?shù)氖嵌M(jìn)制數(shù)據(jù)還是utf8文本數(shù)據(jù),瀏覽器會(huì)驗(yàn)證標(biāo)記和傳輸?shù)膬?nèi)容類(lèi)型是否符合,如果不符合則會(huì)報(bào)錯(cuò)斷開(kāi)連接。
所以服務(wù)端發(fā)送數(shù)據(jù)的時(shí)候需要根據(jù)傳輸?shù)臄?shù)據(jù)類(lèi)型設(shè)置這個(gè)標(biāo)記位,在Workerman中如果是普通utf8文本,則需要設(shè)置
use Workerman\Protocols\Websocket;
$connection->websocketType = Websocket::BINARY_TYPE_BLOB;
如果是二進(jìn)制數(shù)據(jù),則需要設(shè)置
use Workerman\Protocols\Websocket;
$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;
注意:如果沒(méi)設(shè)置$connection->websocketType,則默認(rèn)$connection->websocketType為BINARY_TYPE_BLOB(也就是utf8文本類(lèi)型)。一般應(yīng)用傳輸?shù)亩际莡tf8文本,例如傳輸?shù)氖莏son數(shù)據(jù),所以不用手動(dòng)設(shè)置$connection->websocketType。只有在傳輸二進(jìn)制數(shù)據(jù)時(shí)(例如圖片數(shù)據(jù)、protobuffer數(shù)據(jù)等)才要設(shè)置此屬性為BINARY_TYPE_ARRAYBUFFER。
$foo = new UserLogin();
$foo->setUserId(intval(122));
$foo->setUserName('redyn');
$packed = $foo->serializeToString();
$foo->reset();
echo $packed;
$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;
$connection->send($packed);
我這樣寫(xiě),前端收到的數(shù)據(jù)為空,長(zhǎng)度為0,請(qǐng)問(wèn)哪里錯(cuò)了嗎。protobuffer的