0

0

Swoole怎么让一个服务监听多个端口

尼克

尼克

发布时间:2025-09-29 22:24:02

|

403人浏览过

|

来源于php中文网

原创

Swoole通过addlistener方法实现单进程内多端口监听,支持TCP、UDP、SSL等不同协议。1. 创建主服务后调用addlistener可绑定多个IP:Port,每个端口独立设置协议类型;2. 不同端口可分别处理TCP、UDP或SSL连接,适用于常规通信、广播及加密场景;3. 在receive回调中通过connection_info获取端口信息,实现基于来源端口的差异化业务逻辑;4. 每个swoole_server_port对象可单独注册事件回调,SSL端口需配置证书文件。该机制便于构建集API服务、实时推送与管理功能于一体的综合性网络应用。

swoole怎么让一个服务监听多个端口

在 Swoole 中让一个服务监听多个端口非常简单,只需要在创建 Server 实例后,通过调用 addlistener 方法添加额外的监听端口即可。这样可以在同一个进程内处理不同协议或用途的连接。

1. 基本实现方式:主服务 + 多端口监听

使用 Swoole\Server 创建主服务后,调用 addlistener 可绑定多个 IP:Port 组合,每个端口可独立设置协议类型(如 TCP、UDP、SSL 等)。

addlistener('0.0.0.0', 9502, SWOOLE_SOCK_TCP);

// 添加第三个端口,支持 SSL
$server->addlistener('0.0.0.0', 9503, SWOOLE_SOCK_TCP | SWOOLE_SSL);

// 设置回调函数(主端口)
$server->on('connect', function ($serv, $fd) {
    echo "Client: {$fd} connected to port " . $serv->ports[0]->port . "\n";
});

$server->on('receive', function ($serv, $fd, $reactor_id, $data) {
    $port = $serv->ports[0]->port;
    $serv->send($fd, "Received on port {$port}: " . trim($data) . "\n");
});

// 第二个端口的回调(可单独设置)
$port2 = $server->ports[1];
$port2->on('receive', function ($port, $fd, $reactor_id, $data) {
    $serv = $port->getServer();
    $serv->send($fd, "Reply from port 9502: " . trim($data) . "\n");
});

// 第三个端口(SSL)的回调
$port3 = $server->ports[2];
$port3->on('receive', function ($port, $fd, $reactor_id, $data) {
    $serv = $port->getServer();
    $serv->send($fd, "Secure reply from port 9503: " . trim($data) . "\n");
});

$server->start();

2. 不同端口使用不同协议

Swoole 支持为每个监听端口设置不同的传输协议,比如一个端口处理 TCP,另一个处理 UDP 或 Websocket。

  • 主端口(TCP):用于常规通信
  • 额外端口(UDP):适合广播或低延迟场景
  • SSL 端口:提供加密通信
// 添加 UDP 端口
$server->addlistener('0.0.0.0', 9601, SWOOLE_SOCK_UDP);

$udpPort = $server->ports[3];
$udpPort->on('packet', function ($port, $data, $clientInfo) {
    echo "UDP packet from {$clientInfo['address']}:{$clientInfo['port']} \n";
    $port->send($clientInfo['address'], $clientInfo['port'], "UDP echo: " . $data);
});

3. 区分来源端口处理逻辑

在 receive 回调中可以通过判断连接所属的 port 对象来执行不同业务逻辑。

LALALAND
LALALAND

AI驱动的时尚服装设计平台

下载
$server->on('receive', function ($serv, $fd, $reactor_id, $data) {
    $info = $serv->connection_info($fd);
    $port = $info['server_port'];

    switch ($port) {
        case 9501:
            $serv->send($fd, "Processing as service A\n");
            break;
        case 9502:
            $serv->send($fd, "Processing as service B\n");
            break;
        case 9503:
            $serv->send($fd, "Processing secure request\n");
            break;
        default:
            $serv->send($fd, "Unknown port\n");
    }
});

4. 配置说明与注意事项

使用多端口时注意以下几点:

  • 每个 addlistener 添加的端口都会生成一个新的 swoole_server_port 对象,可通过 $server->ports 访问
  • 每个 port 可独立设置 onConnect / onClose / onReceive / onPacket 等事件回调
  • SSL 端口需提前配置证书:
// SSL 配置示例
$server->set([
    'ssl_cert_file' => '/path/to/ssl.cert',
    'ssl_key_file'  => '/path/to/ssl.key',
]);

基本上就这些。Swoole 的多端口机制灵活高效,适合构建多功能网络服务,比如同时提供 API 接口、实时推送和管理端口。

相关专题

更多
swoole为什么能常驻内存
swoole为什么能常驻内存

swoole常驻内存的特性:1. 事件驱动模型减少内存消耗;2. 协程并行执行任务占用更少内存;3. 协程池预分配协程消除创建开销;4. 静态变量保留状态减少内存分配;5. 共享内存跨协程共享数据降低内存开销。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

290

2024.04.10

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1023

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

429

2025.12.29

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

119

2023.07.25

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

283

2023.08.08

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

377

2024.11.14

SSL检测工具介绍
SSL检测工具介绍

SSL检测工具有SSL Labs、SSL Check、SSL Server Test、SSLMate、SSL/TLS Analyzer等。详细介绍:1、SSL Labs是一个由Qualys提供的在线SSL检测工具,可以评估服务器证书的部署情况、加密套件、协议支持等方面的安全性,它提供了一个详细的报告,包括证书的颁发者、有效期、安全性配置等;2、SSL Check等等。

331

2023.10.20

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7.4万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号