如何同时使用多种协议
swoole_server::listen
listen
方法用于创建一个额外的监听端口,返回一个swoole_server_port
对象,可以调用set
和on
方法。
swoole_server_port swoole_server->listen(
string $host,
int $port,
int $type
)
使用注意
- 新创建的端口需要设置协议参数否则将会复用
swoole_server
的协议解析方式 - 新创建的端口无法使用
onRequest
和onMessage
回调
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
权限 - 主服务器是
WebSocket
或HTTP
协议时,新监听的TCP
端口默认会继承主服务器的协议设置,所以必须单独调用set
方法设置新的协议才会启用新协议。