背景概述
综合之前所学的知识点, 我们现在需要实现一个下面的任务, 客户端发送消息给服务端 B, 然后服务端 B 将消息发送给服务端 C, 然后 C 将结果返回给 B, B再把消息返回给 A, 这样的一个处理流程.
客户端A代码
case_client.php
<?php
// 创建一个 TCP 连接
$client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
// 尝试连接到本地的 9501 端口
if (!$client->connect('127.0.0.1', 9503, 1000)) {
// 连接失败的提示信息
exit("connect failed. Error: {$client->errCode}\n");
}
// 发送到服务端的数据
$client->send("hello world\n");
// 打印服务端返回的数据
echo $client->recv();
// 关闭连接
$client->close();
?>
服务端B
case_server_and_client.php
<?php
// 创建Server对象,监听 9501端口
$server = new Swoole\Server('0.0.0.0', 9503);
// 监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
// 监听数据接收事件
$server->on('Receive', function ($server, $fd, $from_id, $data) {
echo 'client request data : ', $data;
// 创建Server对象,监听 9501端口
$client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
// 尝试连接到本地的 9501 端口
if (!$client->connect('127.0.0.1', 9504, 1000)) {
// 连接失败的提示信息
exit("connect failed. Error: {$client->errCode}\n");
}
// 发送到服务端的数据
$client->send("Server and Client request data \n");
$result = $client->recv();
echo $result."\n";
$client->close();
$server->send($fd, $result."\n");
});
// 监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client: Close.\n";
});
// 启动服务器
$server->start();
?>
服务端C
case_server.php
<?php
// 创建Server对象,监听 9501端口
$server = new Swoole\Server('0.0.0.0', 9504);
// 监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
// 监听数据接收事件
$server->on('Receive', function ($server, $fd, $from_id, $data) {
echo "request data : ".$data."\n";
$server->send($fd, "Server response Data : server response data \n");
});
// 监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client And Server : Close.\n";
});
// 启动服务器
$server->start();
?>
执行代码
先打开服务端C, 在打开服务端B, 最后在执行客户端A
[server] php case_server.php
[ServerAndClient] php case_server_and_client.php
[client] php case_client.php
Server response Data : server response data
## 服务端 C 结果
[server] php case_server.php
Client: Connect.
request data : Server and Client request data
Client And Server : Close.
## 服务端 B 结果
[ServerAndClient] php case_server_and_client.php
Client: Connect.
client request data : hello world
Server response Data : server response data
Client: Close.
## 客户端 A 结果
[client] php case_client.php
Server response Data : server response data