💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
AsyncUdpConnection可以作为udp客户端与远程udp服务端进行通讯。 其实udp是无连接的,但是为了易用性,这里与AsyncTcpConnection命名规则和接口保持基本一致。 **注意:与AsyncTcpConnection不同,AsyncUdpConnection不支持以下属性或者方法。** 1. 没有connection->id属性 2. 没有connection->worker属性 3. 没有connection->transport属性 4. 没有connection->maxSendBufferSize属性 5. 没有connection->defaultMaxSendBufferSize属性 6. 没有connection->maxPackageSize属性 7. 没有connection->onBufferFull回调 8. 没有connection->onBufferDrain回调 9. 没有connection->onError回调 10. 没有connection->destroy()接口 11. 没有connection->pauseRecv()接口 12. 没有connection->resumeRecv()接口 13. 没有connection->pipe()接口 14. 没有connection->reconnect()接口 **AsyncUdpConnection支持的属性或者方法** 1.支持connection->protocol属性 2.支持connection->onMessage回调 3.支持connection->connect()方法 4.支持connection->send()方法 5.支持connection->getRemoteIp()方法 6.支持connection->getRemotePort()方法 7.支持connection->onClose回调。 >[danger]注意:因为tcp是基于连接的,一般情况下,当任何一方调用close断开连接时双方都能触发onClose。但是udp是无连接的,调用connection->close()方法只能触发本地的onClose回调,无法触发对端的onClose回调。 ## **常量为空** ## **属性** ConnectionInterface:<span style="color:red">**onMessage**</span> ~~ConnectionInterface:<span style="color:red">onError</span>~~ ConnectionInterface:statistics (get_class_vars和getProperties能获取到get_object_vars获取不到) ~~AsyncUdpConnection:onBufferFull(getProperties和get_object_vars能获取到get_class_vars获取不到)~~ ~~AsyncUdpConnection:onBufferDrain(getProperties和get_object_vars能获取到get_class_vars获取不到)~~ AsyncUdpConnection:<span style="color:red">onConnect</span> AsyncUdpConnection:<span style="color:red">**onClose**</span> UdpConnection:**protocol** ~~UdpConnection:transport~~ ## **方法:** getMethods和get_class_methods都能获取到: AsyncUdpConnection:__construct AsyncUdpConnection:baseRead($socket):UDP读取数据并将数据传入onMessage的$data参数,connect方法会调用它 AsyncUdpConnection:<span style="color:red">**send**</span> AsyncUdpConnection:<span style="color:blue">close</span> AsyncUdpConnection:<span style="color:blue">**connect**</span> UdpConnection:**getRemoteIp** UdpConnection:**getRemotePort** UdpConnection:getRemoteAddress UdpConnection:getLocalIp UdpConnection:getLocalPort UdpConnection:getLocalAddress UdpConnection:isIpV4 UdpConnection:isIpV6 UdpConnection:getSocket ## [示例](https://www.workerman.net/doc/workerman/async-udp-connection/construct.html#%E7%A4%BA%E4%BE%8B) ~~~php use Workerman\Worker; use Workerman\Connection\AsyncUdpConnection; use Workerman\Timer; require_once __DIR__ . '/vendor/autoload.php'; $worker = new Worker('udp://0.0.0.0:1234'); $worker->onWorkerStart = function(){ // 1秒后启动一个udp客户端,连接1234端口并发送字符串 hi Timer::add(1, function(){ $udp_connection = new AsyncUdpConnection('udp://127.0.0.1:1234'); $udp_connection->onConnect = function($udp_connection){ $udp_connection->send('hi'); }; $udp_connection->onMessage = function($udp_connection, $data){ // 收到服务端返回的数据 hello echo "recv $data\r\n"; // 关闭连接 $udp_connection->close(); }; $udp_connection->connect(); }, null, false); }; $worker->onMessage = function($connection, $data) { // 收到AsyncUdpConnection客户端发来的数据,返回字符串 hello $connection->send("hello"); }; Worker::runAll(); ~~~ 输出:recv hello