# TCP/UDP服务器
本章介绍Tcp/Udp服务器,前两章介绍的Http、Websocket服务器也能同时开启Tcp/Udp服务,而本章介绍的是专用的Tcp/Udp服务器。(其实也能通过各种配置实现支持Http、Websocket,但相对于直接使用相应服务器来说比较复杂)
TCP/UDP服务器是以内置项目的形式封装于project/tcp
目录下,支持自定义配置、扩展等。该服务依赖于\Swoole\Server,你必须在Swoole环境才能开启此服务器。
# 配置
Tcp项目下配置了Tcp/Udp服务器的默认配置值,你可以创建APP_COMMON . 'config/tcp.php'
文件自定义覆盖默认配置。下述为默认配置
return [
'tcp' => [
'service' => '\tcp\service\TcpServer', // Tcp/Udp服务器类名,你可以在自定义扩展配置中覆盖定义为服务器子类
'host' => '0.0.0.0', // 监听主机地址
'port' => 20462, // 监听端口
'mode' => SWOOLE_PROCESS, // Swoole服务器运行模式, 具体参考Swoole文档
'sock_type' => SWOOLE_SOCK_TCP, // 指定服务器类型, 具体参见Swoole文档
'extra_ports' => [['host' => '0.0.0.0', 'port' => 20463, 'sock_type' => SWOOLE_SOCK_UDP]], // 需要额外监听的Tcp/Udp端口
// 'api_host' => '', // 服务器Api主机,如果需要远程管理你的服务器,可以通过此Rpc接口实现
// 'api_port' => '', // 服务器Api端口
// 'api_password' => '', // 服务器Api Rpc密匙
],
'swoole_tcp' => [], // Swoole\Server的配置,将直接传递给\Swoole\Server::set方法使用
'#extends' => [
APP_COMMON . 'config/tcp.php', // 给用户自定义的项目扩展配置路径
],
];
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上述配置中的tcp.mode
、tcp.sock_type
及swoole_tcp
为Swoole配置,具体请参考Swoole文档
# 接口
Tcp/Udp服务器通过控制器\tcp\controller\TcpServerController
暴露接口,这些接口通过节点配置了仅允许以命令行的方式请求。
# start
开启Tcp/Udp服务器
# Swoole环境运行
dce tcp start
# Docker/Podman运行Swoole镜像
docker run --rm --name server -it -v /mnt/f/App/Mine/dce/backend/dce/:/app/ -p 20462:20462 -p 20463:20463/udp idrunk/swoole /app/dce tcp start
# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman run --rm --name server -it -v /mnt/f/App/Mine/dce/backend/dce/:/app/ -p 20462:20462 -p 20463:20463/udp idrunk/swoole /app/dce tcp start
# 成功响应
# Tcp server started with 0.0.0.0:20462.
2
3
4
5
6
7
8
9
# 测试连接
Tcp
nc 127.0.0.1 20462
#
# {"data":{"info":"恭喜!服务端收到了你的消息并给你作出了回应"}}
2
3
4
Udp
nc -u 127.0.0.1 20463
#
# {"data":{"info":"恭喜!服务端收到了你的消息并给你作出了回应"}}
# 作者在Windows下用netcat测试udp时无法正常进行,切换到linux后正常测试通过
2
3
4
5
6
# stop
关闭Tcp/Udp服务器
# Swoole环境运行
dce tcp stop
# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman exec server /app/dce tcp stop
# 成功响应
# Tcp server was stopped.
2
3
4
5
6
7
# reload
重载Tcp/Udp服务器
# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman exec server /app/dce tcp reload
# 成功响应
# Tcp server was reloaded.
2
3
4
5
# status
查看Tcp/Udp服务器状态信息
# Windows10 Wsl2 Podman运行Swoole镜像
ubuntu run podman exec server /app/dce tcp status
# {
# "server": {
# "start_time": 1613032233,
# "connection_num": 0,
# "accept_count": 1,
# "close_count": 1,
# "worker_num": 16,
# "idle_worker_num": 16,
# "task_worker_num": 0,
# "tasking_num": 0,
# "request_count": 4,
# "dispatch_count": 1,
# "worker_request_count": 0,
# "worker_dispatch_count": 0,
# "coroutine_num": 2
# }
# }
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 服务类库
# \tcp\service\TcpServer
Tcp/Udp服务器类,继承于服务器基类,主要在此类中实例化了\Swoole\Server
类,并绑定接入了各种Dce业务流。
此类即上述配置中service
属性的默认值,如果你需要拓展此类或需自定义类作为Tcp/Udp服务器类,可以将该配置值设置为你的完整类名,这时调用tcp start
接口将实例化你配置的类。
# \tcp\service\RawRequestTcp
Tcp原始请求类,本类继承于长连接原始请求类,实现了该类及各父辈类的抽象方法,完成了相关Tcp请求参数的填充。
你可以自定义Tcp/Udp服务器类,并定义\dce\service\server\ServerMatrix::$rawRequestTcpClass
属性值为继承拓展此类或自定义原始请求类的类名类,以此方式实现自定义Tcp原始请求类。
# \tcp\service\RawRequestUdp
Udp原始请求类,本类继承于长连接原始请求类,实现了该类及各父辈类的抽象方法,完成了相关Udp请求参数的填充。
你可以自定义Tcp/Udp服务器类,并定义\dce\service\server\ServerMatrix::$rawRequestUdpClass
属性值为继承拓展此类或自定义原始请求类的类名类,以此方式实现自定义Udp原始请求类。
← Websocket服务器 综合工具 →