/**
* 发送数据到网关
* @param string $address
* @param string $buffer
*/
protected static function sendToGateway($address, $gateway_data)
{
// 有$businessWorker说明是workerman环境,使用$businessWorker发送数据
if(self::$businessWorker)
{
if(!isset(self::$businessWorker->gatewayConnections))
{
return false;
}
return self::$businessWorker->gatewayConnections->send($gateway_data);
}
// 非workerman环境,使用udp发送数据
$gateway_buffer = GatewayProtocol::encode($gateway_data);
$client = stream_socket_client("tcp://$address", $errno, $errmsg);
return strlen($gateway_buffer) == stream_socket_sendto($client, $gateway_buffer);
}
代码注释里写着使用UDP发送数据 ,但从stream_socket_client的连接内容来看是TCP的。
想了解的是这块是写错了还是之前由UDP变为现在的TCP?
如果是后一种的话,用UDP有什么缺陷,要改为用TCP呢?UDP不应该是开销更小吗?谢谢
从代码的提交记录来看是因为1.0适配到2.0改为了TCP,想了解一下从UDP到TCP中间的这个故事。
udp有包大小限制,导致GatewayClient1.0无法推送大于65k的数据。
目前GatewayWorker2.0 和GatewayClient2.0 都改用tcp了