Swoole多协议多端口

如何同时使用多种协议

swoole_server::listen

listen方法用于创建一个额外的监听端口,返回一个swoole_server_port对象,可以调用seton方法。

swoole_server_port swoole_server->listen(
  string $host, 
  int $port, 
  int $type
)

使用注意

  • 新创建的端口需要设置协议参数否则将会复用swoole_server的协议解析方式
  • 新创建的端口无法使用onRequestonMessage回调

Server->addListener

listen方法是addListener方法的别名,addListener用于增加监听的端口。

function Server->addListener(
  string $host,
  int $port,
  int $type = SWOOLE_SOCK_TCP
)

支持的Socket类型

int $type = SWOOLE_SOCK_TCP
  • SWOOLE_TCP/SWOOLE_SOCK_TCP

表示 TCP IPv4 的 Socket

  • SWOOLE_TCP6/SWOOLE_SOCK_TCP6

表示 TCP IPv6 的 Socket

  • SWOOLE_UDP/SWOOLE_SOCK_UDP

表示 UDP IPv4 的 Socket

  • SWOOLE_UDP6/SWOOLE_SOCK_UDP6

表示 UDP IPv6 的Socket

  • SWOOLE_UNIX_DGRAM

表示 UNIX Socket 的 dgram

  • SWOOLE_UNIX_STREAM

表示 UNIX Socket 的 stream

UNIX Socket模式下$host参数必须填写可访问的文件路径,$port参数可忽略。客户端的$fd将不再是数字,而是一个文件路径的字符串。

IPv4使用127.0.0.1表示监听本机,0.0.0.0表示监听所有地址。IPv6使用::1表示监听本机,::(0:0:0:0:0:0:0:0)表示监听所有地址。

若监听成功则返回Swoole\Server\Port对象,在此对象上可以为此端口单独设置事件回调函数和运行参数。若监听失败则返回false,可调用getLastError方法获取错误码。

业务代码可通过调用Server->getClientInfo方法来获取某个连接来自于哪个端口。

可以混合使用UDP或TCP并同时监听内网和外网端口

使用注意

  • 监听1024以下的端口需要root权限
  • 主服务器是WebSocketHTTP协议时,新监听的TCP端口默认会继承主服务器的协议设置,所以必须单独调用set方法设置新的协议才会启用新协议。

你可能感兴趣的:(Swoole多协议多端口)