背景概述
综合之前所学的知识点, 我们现在需要实现一个下面的任务, 客户端发送消息给服务端 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.phpServer response Data : server response data## 服务端 C 结果[server] php case_server.phpClient: Connect.request data : Server and Client request dataClient And Server : Close.## 服务端 B 结果[ServerAndClient] php case_server_and_client.phpClient: Connect.client request data : hello worldServer response Data : server response dataClient: Close.## 客户端 A 结果[client] php case_client.phpServer response Data : server response data
