上一篇讲解了快速安装PHP和Swoole, 这一节讲解快速创建 TCP 做事端 和TCP 客户端。
第一步: TCP 做事端创建, 先创建文件 tcp_server.php ,然后写入以下代码
/ 创建 TCP 做事器工具 $host 监听的IP地址,127.0.0.1表示监听本机,0.0.0.0表示监听所有地址 $port 监听的端口。监听小于1024的端口须要 root 权限 $mode 运行的模式。默认 SWOOLE_PROCESS 多进程模式,SWOOLE_BASE 基本模式 $sock_type 指定 Socket 的类型,默认 SWOOLE_SOCK_TCP。支持 TCP、TCP6、UDP、UDP6 等 /$server = new Swoole\Server('0.0.0.0', 9502, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
第二步:参数设置
/ 用于设置运行时的各项参数 /$server->set( [ 'worker_num' => 2, // worker 进程数,一样平常为 CPU 核数的 1-4 倍 'max_request' => 10000 // 最大要求数 ]);
第三步:监听连接事宜
/ 监听连接事宜 $server Swoole\Server 工具 $fd TCP客户端连接的唯一标识符 $reactor_id 线程编号 /$server->on('Connect', function ($server, $fd, $reactor_id) { echo "[连接事宜] 客户端:{$fd} 线程:{$reactor_id}" . PHP_EOL;});
第四步:监听数据吸收事宜
/ 监听数据吸收事宜 $server Swoole\Server 工具 $fd TCP客户端连接的唯一标识符 $reactor_id 线程编号 $data 吸收到的数据内容 /$server->on('Receive', function($server, $fd, $reactor_id, $data) { echo "[连接事宜] 客户端:{$fd} 吸收到的数据:{$data}"; // 默认发送内容不能超过 2M , 可通过 buffer_output_size 修正更大 $server->send($fd, "[吸收事宜] 客户端:{$fd} 线程:{$reactor_id} 吸收数据:{$data}") . PHP_EOL;});
第五步:监听关闭事宜
/ 监听关闭事宜 $server Swoole\Server 工具 $fd TCP客户端连接的唯一标识符 $reactor_id 线程编号 /$server->on('Close', function($server, $fd, $reactor_id) { echo "[关闭事宜] 客户端: {$fd} 已经关闭!";});
第六步:启动做事端
$server->start();
TCP 做事端完全代码如下:
/ 创建 TCP 做事器工具 $host 监听的IP地址,127.0.0.1表示监听本机,0.0.0.0表示监听所有地址 $port 监听的端口。监听小于1024的端口须要 root 权限 $mode 运行的模式。默认 SWOOLE_PROCESS 多进程模式,SWOOLE_BASE 基本模式 $sock_type 指定 Socket 的类型,默认 SWOOLE_SOCK_TCP。支持 TCP、TCP6、UDP、UDP6 等 /$server = new Swoole\Server('0.0.0.0', 9502, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);/ 用于设置运行时的各项参数 /$server->set( [ 'worker_num' => 2, // worker 进程数,一样平常为 CPU 核数的 1-4 倍 'max_request' => 10000 // 最大要求数 ]);/ 监听连接事宜 $server Swoole\Server 工具 $fd TCP客户端连接的唯一标识符 $reactor_id 线程编号 /$server->on('Connect', function ($server, $fd, $reactor_id) { echo "[连接事宜] 客户端:{$fd} 线程:{$reactor_id}" . PHP_EOL;});/ 监听数据吸收事宜 $server Swoole\Server 工具 $fd TCP客户端连接的唯一标识符 $reactor_id 线程编号 $data 吸收到的数据内容 /$server->on('Receive', function($server, $fd, $reactor_id, $data) { echo "[连接事宜] 客户端:{$fd} 吸收到的数据:{$data}"; // 默认发送内容不能超过 2M , 可通过 buffer_output_size 修正更大 $server->send($fd, "[吸收事宜] 客户端:{$fd} 线程:{$reactor_id} 吸收数据:{$data}") . PHP_EOL;});/ 监听关闭事宜 $server Swoole\Server 工具 $fd TCP客户端连接的唯一标识符 $reactor_id 线程编号 /$server->on('Close', function($server, $fd, $reactor_id) { echo "[关闭事宜] 客户端: {$fd} 已经关闭!";});/ 启动做事端 /$server->start();
利用PHP实行启动TCP做事端
php tcp_server.php
利用 telnet 测试做事端和客户端输出,如果你的系统中还没有安装 telnet 软件,可以利用以下命令安装
yum install telnet
利用 telnet 命令测试查看客户真个输出结果:
客户端
查看做事真个输出结果:
做事端
下面连续讲解如何利用PHP代码实现 TCP 客户端。
第一步: TCP 客户端工具创建, 先创建文件 tcp_client.php ,然后写入以下代码
/ 创建一个 TCP 客户端工具 $type 类型,如 TCP/UDP $async 默认为同步壅塞 SWOOLE_SOCK_SYNC,异步非壅塞为 SWOOLE_SOCK_ASYNC /$client = new Swoole\Client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_SYNC);
第二步:连接远程 TCP 做事端
/ 连接到远程 TCP 做事端 $host 远程做事器地址 $post 远程做事器端口 $timeout 网络IO超时,默认为 0.5s /if( !$client->connect('127.0.0.1', 9502, 5)){ exit('连接 TCP 做事端失落败!
' . PHP_EOL);}
第三步:向 TCP 做事端发送数据
/ 向 TCP 做事端发送数据, 成功发送则返回已经发送的数据长度 $data 发送的数据 /$res = $client->send($data);if(!$res) { exit('数据发送失落败' . PHP_EOL);} else { echo $res;}
第四步:从 TCP 做事端吸收数据
/ 从 TCP 做事端吸收数据,同步壅塞 /$receive = $client->recv();echo $receive . PHP_EOL;
TCP 客户端完全代码如下:
/ 创建一个 TCP 客户端工具 $type 类型,如 TCP/UDP $async 默认为同步壅塞 SWOOLE_SOCK_SYNC,异步非壅塞为 SWOOLE_SOCK_ASYNC /$client = new Swoole\Client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_SYNC);/ 连接到远程 TCP 做事端 $host 远程做事器地址 $post 远程做事器端口 $timeout 网络IO超时,默认为 0.5s /if( !$client->connect('127.0.0.1', 9502, 5)){ exit('连接 TCP 做事端失落败!
' . PHP_EOL);}// 须要发送到做事真个数据$data = "这是我发送的内容!";/ 向 TCP 做事端发送数据, 成功发送则返回已经发送的数据长度 $data 发送的数据 /$res = $client->send($data);if(!$res) { exit('数据发送失落败' . PHP_EOL);} else { echo $res;}/ 从 TCP 做事端吸收数据,同步壅塞 /$receive = $client->recv();echo $receive . PHP_EOL;
利用PHP实行运行TCP客户端:
php tcp_client.php
查看输入出结果:
PHP 客户端
至此,TCP 做事端和 TCP 客户端创建完毕。全体过程如创造有报错,请留言,我会回答补充息争释。