监听端口
Swoole-1.8.0
新增了对 多端口混合协议
的支持。 Server
可以监听多个端口,每个端口都可以设置不同的协议处理方式(set)和回调函数(on)。 SSL/TLS
传输加密也可以只对特定的端口启用。
- 未设置协议处理选项的监听端口,默认使用无协议模式
- 未设置回调函数的监听端口,使用
$server
对象的回调函数 - 监听端口返回的对象类型为
swoole_server_port
- 不同监听端口的回调函数,仍然是相同的Worker进程空间内执行
监听新端口
$port1 = $server->listen("127.0.0.1", 9501, SWOOLE_SOCK_TCP); $port2 = $server->listen("127.0.0.1", 9502, SWOOLE_SOCK_UDP); $port3 = $server->listen("127.0.0.1", 9502, SWOOLE_SOCK_TCP | SWOOLE_SSL);
设置网络协议
$port1->set( 'open_length_check' => true, 'package_length_type' => 'N', 'package_length_offset' => 0, 'package_max_length' => 800000, ); $port3->set( 'open_eof_split' => true, 'package_eof' => "\r\n", 'ssl_cert_file' => 'ssl.cert', 'ssl_key_file' => 'ssl.key', );
设置回调函数
$port1->on('connect', function ($serv, $fd){ echo "Client:Connect.\n"; }); $port1->on('receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, 'Swoole: '.$data); $serv->close($fd); }); $port1->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); $port2->on('packet', function ($serv, $data, $addr) { var_dump($data, $addr); });
Http/WebSocket
swoole_http_server
和 swoole_websocket_server
因为是使用继承子类实现的,无法使用 listen
创建 Http/WebSocket
服务器。如果服务器的主要功能为 RPC
,但希望提供一个简单的Web管理界面。
在这样的场景中,可以先创建Http/WebSocket
服务器,然后再进行 listen
监听 RPC服务器
的端口。