需求描述
某直播平台,需要观察员去不定时的抽查直播平台的内容,对于直播网站不良的直播进行封禁和停播的处理。
参考文献
Tcp server 服务:https://wiki.swoole.com/#/start/start_tcp_server?id=程序代码
端口监听:https://wiki.swoole.com/#/server/port?id=多端口监听
面向对象代码实现:https://github.com/mailjobblog/dev_swoole/tree/master/210427_listen
代码示例
面向过程代码
实现计划
-
server
- 建立一个 【TCP服务,端口为9501】
- 再建立一个监听服务,端口为9505,去监听 9501的TCP服务;
-
client
- 作为观察角色,通过连接 9505 监听服务,然后监听服务再断掉 9501的TCP服务。
server.php
<?php
//创建Server对象,监听 0.0.0.0:9501 端口
$server = new Swoole\Server('0.0.0.0', 9501);
//监听连接进入事件
$server->on('Connect', function ($server, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
$server->send($fd, "Server: {$data}");
});
//监听连接关闭事件
$server->on('Close', function ($server, $fd) {
echo "Client: Close.\n";
});
//返回port对象
$port1 = $server->listen("127.0.0.1", 9505, SWOOLE_SOCK_TCP);
$port1->on('connect', function ($serv, $fd){
echo " port1 Client:{$fd}Connect 已经连接到监听服务.\n";
});
$port1->on('receive', function ($serv, $fd, $from_id, $data )use ($server) {
$server->shutdown(); // 关闭 server 服务
$serv->send($fd, 'Swoole: '.$data);
$serv->close($fd);
});
$port1->on('close', function ($serv, $fd) {
echo " port1Client:{$fd} Close 关闭监听服务的连接.\n";
});
//启动服务器
$server->start();
client.php
<?php
$client = new Swoole\Client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9505, -1)) {
exit("connect failed. Error: {$client->errCode}\n");
}
$client->send("我是来关闭你的server的\n");
echo $client->recv();
$client->close();
测试截图
面向对象代码
代码下载
参照上文中的参考文献下载
逻辑描述
通过连接业务服务,然后发送 code=0 的标识。 业务服务将该请求进行判断,然后发送给监听服务。 监听服务根据需求,处理相关的业务(停止/详情)逻辑。
stopClient.php 测试截图
infoClient.php 测试截图