TCP/UDP 服务

框架默认提供创建 TCP/UDP 服务的能力。只需要进行简易的配置,便可使用。

使用 TCP 服务

创建 TcpServer 类

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use Hyperf\Contract\OnReceiveInterface;
  5. class TcpServer implements OnReceiveInterface
  6. {
  7. public function onReceive($server, int $fd, int $reactorId, string $data): void
  8. {
  9. $server->send($fd, 'recv:' . $data);
  10. }
  11. }

创建对应配置

  1. <?php
  2. declare(strict_types=1);
  3. use Hyperf\Server\Server;
  4. use Hyperf\Server\Event;
  5. return [
  6. // 以下删除了其他不相关的配置项
  7. 'servers' => [
  8. [
  9. 'name' => 'tcp',
  10. 'type' => Server::SERVER_BASE,
  11. 'host' => '0.0.0.0',
  12. 'port' => 9504,
  13. 'sock_type' => SWOOLE_SOCK_TCP,
  14. 'callbacks' => [
  15. Event::ON_RECEIVE => [App\Controller\TcpServer::class, 'onReceive'],
  16. ],
  17. 'settings' => [
  18. // 按需配置
  19. ],
  20. ],
  21. ],
  22. ];

实现客户端

  1. <?php
  2. $client = new \Swoole\Client(SWOOLE_SOCK_TCP);
  3. $client->connect('127.0.0.1', 9504);
  4. $client->send('Hello World.');
  5. $ret = $client->recv(); // recv:Hello World.

使用 UDP 服务

创建 UdpServer 类

如果没有 OnPacketInterface 接口文件,则可以不实现此接口,运行结果与实现接口一致,只要保证配置正确即可。

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller;
  4. use Hyperf\Contract\OnPacketInterface;
  5. class UdpServer implements OnPacketInterface
  6. {
  7. public function onPacket($server, $data, $clientInfo): void
  8. {
  9. var_dump($clientInfo);
  10. $server->sendto($clientInfo['address'], $clientInfo['port'], 'Server:' . $data);
  11. }
  12. }

创建对应配置

  1. <?php
  2. declare(strict_types=1);
  3. use Hyperf\Server\Server;
  4. use Hyperf\Server\Event;
  5. return [
  6. // 以下删除了其他不相关的配置项
  7. 'servers' => [
  8. [
  9. 'name' => 'udp',
  10. 'type' => Server::SERVER_BASE,
  11. 'host' => '0.0.0.0',
  12. 'port' => 9505,
  13. 'sock_type' => SWOOLE_SOCK_UDP,
  14. 'callbacks' => [
  15. Event::ON_PACKET => [App\Controller\UdpServer::class, 'onPacket'],
  16. ],
  17. 'settings' => [
  18. // 按需配置
  19. ],
  20. ],
  21. ],
  22. ];

事件

事件 备注
Event::ON_CONNECT 监听连接进入事件
Event::ON_RECEIVE 监听数据接收事件
Event::ON_CLOSE 监听连接关闭事件
Event::ON_PACKET UDP 数据接收事件