GatewayClient是通过TCP连接和发送消息的吗

zhs227
  /**
    * 发送数据到网关
    * @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不应该是开销更小吗?谢谢

4246 2 0
2个回答

zhs227

从代码的提交记录来看是因为1.0适配到2.0改为了TCP,想了解一下从UDP到TCP中间的这个故事。

  • 暂无评论
walkor 打赏

udp有包大小限制,导致GatewayClient1.0无法推送大于65k的数据。
目前GatewayWorker2.0 和GatewayClient2.0 都改用tcp了

  • 暂无评论
年代过于久远,无法发表回答
×
🔝