都看了論壇的問(wèn)答,發(fā)現(xiàn)GatewayWorker不支持動(dòng)態(tài)發(fā)送二進(jìn)制數(shù)據(jù),把項(xiàng)目卡住了
有沒(méi)有什么解決辦法啊
class Events
{
public static function ArrayBufferPack($buffer)
{
$len = \strlen($buffer);
$first_byte = "\x82";
if ($len <= 125) {
$encode_buffer = $first_byte . \chr($len) . $buffer;
} else {
if ($len <= 65535) {
$encode_buffer = $first_byte . \chr(126) . \pack("n", $len) . $buffer;
} else {
$encode_buffer = $first_byte . \chr(127) . \pack("xxxxN", $len) . $buffer;
}
}
return $encode_buffer;
}
public static function onMessage($client_id, $message)
{
Gateway::sendToAll(static::ArrayBufferPack(json_encode($new_message)), null, null, true);
}
}
像上面這樣加一個(gè)ArrayBufferPack方法,在需要發(fā)送websocket二進(jìn)制數(shù)據(jù)的時(shí)候,
1、用ArrayBufferPack打包數(shù)據(jù)。
2、send方法的raw參數(shù)傳true (每個(gè)send方法如sendToUid sendToGroup等都有個(gè)raw參數(shù))
在不需要發(fā)送二進(jìn)制數(shù)據(jù)的時(shí)候,還是按照之前的方式發(fā)送(不能ArrayBufferPack打包,也不要傳raw參數(shù))