共计 1491 个字符,预计需要花费 4 分钟才能阅读完成。
一、TCP 服务
TCP 服务端
我们看 Swoole 官方文档入门指引 -> 快速起步 -> 创建 TCP 服务器,把文档的示例代码跑一次,看下效果:
server.php
<?php
// 创建 Server 对象,监听 127.0.0.1:9501 端口
$serv = new Swoole\Server("127.0.0.1", 9501);
// 设置自定义参数
// @doc https://wiki.swoole.com/wiki/page/13.html
$serv->set([
'worker_num' => 8, // worker 进程数为 cpu 1- 4 倍
'max_request' => 10000,
]);
// 监听连接进入事件
/**
* $fd 客户端连接的唯一标识
* $reactor_id 线程 ID
*/
$serv->on('Connect', function ($serv, $fd, $reactorId) {echo "Client: {$reactorId}-{$fd}-Connect.\n";
});
// 监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $reactorId, $data) {$serv->send($fd, "Server: {$reactorId} - {$fd}".$data);
});
// 监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {echo "Client: Close.\n";});
// 启动服务器
$serv->start();
我们先开启服务,然后再通过 telnet
命令分别开启两个窗口连接该服务
root@5ee6bfcc1310:/work/study/code/swoole/demo/server# php server.php
Client: 0-1-Connect.
Client: 1-2-Connect.
0 号客户端:
root@5ee6bfcc1310:/# telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
Server: 0 - 1 hello
1 号客户端:
root@5ee6bfcc1310:/# telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
Server: 1 - 2 hello
TCP 客户端
tcp_client.php
<?php
// 该文件模拟 telnet 127.0.0.1 9501 命令进行请求服务端
// 连接 Swoole tcp 服务
$client = new Swoole\Client(SWOOLE_SOCK_TCP);
if(!$client->connect("127.0.0.1", 9501)){
echo 'Connect error';
exit;
}
// php cli 常量
fwrite(STDOUT, "请输入消息");
$msg = trim(fgets(STDIN));
// 发送消息给 tcp server 服务器
$client->send($msg);
// 接收来自 server 的数据
$res = $client->recv();
echo $res;
执行该脚本:
php tcp_client.php
打印:
root@5ee6bfcc1310:~# /work/study/soft/php/bin/php /work/study/code/swoole/demo/client/tcp_client.php
请输入消息 3
Server: 0 - 3 3
正文完