需求描述
某直播平台,需要观察员去不定时的抽查直播平台的内容,对于直播网站不良的直播进行封禁和停播的处理。
参考文献
Tcp server 服务:https://wiki.swoole.com/#/start/start_tcp_server?id=%e7%a8%8b%e5%ba%8f%e4%bb%a3%e7%a0%81
端口监听:https://wiki.swoole.com/#/server/port?id=%e5%a4%9a%e7%ab%af%e5%8f%a3%e7%9b%91%e5%90%ac
面向对象代码实现: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);
//监听连接进入事件
{
mathJaxContainer[0]}server, $fd) {
echo "Client: Connect.\n";
});
//监听数据接收事件
{
mathJaxContainer[1]}server, {
mathJaxContainer[2]}reactor_id, $data) {
{
mathJaxContainer[3]}fd, "Server: {$data}");
});
//监听连接关闭事件
{
mathJaxContainer[4]}server, $fd) {
echo "Client: Close.\n";
});
//返回port对象
{
mathJaxContainer[5]}server->listen("127.0.0.1", 9505, SWOOLE_SOCK_TCP);
{
mathJaxContainer[6]}serv, $fd){
echo " port1 Client:{$fd}Connect 已经连接到监听服务.\n";
});
{
mathJaxContainer[7]}serv, {
mathJaxContainer[8]}from_id, {
mathJaxContainer[9]}server) {
$server->shutdown(); // 关闭 server 服务
{
mathJaxContainer[10]}fd, 'Swoole: '.$data);
{
mathJaxContainer[11]}fd);
});
{
mathJaxContainer[12]}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 测试截图