swoole 端口监听,关闭tcp服务

简介: 某直播平台,需要观察员去不定时的抽查直播平台的内容,对于直播网站不良的直播进行封禁和停播的处理。

需求描述

某直播平台,需要观察员去不定时的抽查直播平台的内容,对于直播网站不良的直播进行封禁和停播的处理。

参考文献

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();
AI 代码解读

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();
AI 代码解读

测试截图

面向对象代码

代码下载

参照上文中的参考文献下载

逻辑描述

通过连接业务服务,然后发送 code=0 的标识。 业务服务将该请求进行判断,然后发送给监听服务。 监听服务根据需求,处理相关的业务(停止/详情)逻辑。

stopClient.php 测试截图

image-20210427192457010

infoClient.php 测试截图

image-20210427190951718

目录
打赏
0
0
0
0
11
分享
相关文章
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
40 7
【Azure APIM】APIM服务配置网络之后出现3443端口不通,Management Endpoint不健康状态
如果没有关联的网络安全组,则阻止所有网络流量通过子网和网络接口。
57 30
检测指定TCP端口开放状态免费API接口教程
此API用于检测指定TCP端口是否开放,支持POST/GET请求。需提供用户ID、KEY、目标主机,可选指定端口(默认80)和地区(默认国内)。返回状态码、信息提示、检测主机、端口及状态(开放或关闭)。示例中ID和KEY为公共测试用,建议使用个人ID和KEY以享受更高调用频率。
79 14
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
272 5
检测指定TCP端口开放状态免费API接口教程
该API用于检测目标主机指定TCP端口是否开放,适用于检测连通状态等场景。支持指定大陆、美国、香港等检测节点。请求地址为 `https://cn.apihz.cn/api/wangzhan/port.php`,支持POST和GET请求方式。请求参数包括 `id`、`key`、`type`、`host` 和 `port`。返回参数包含检测结果和状态码。示例请求:`https://cn.apihz.cn/api/wangzhan/port.php?id=88888888&key=88888888&type=1&host=49.234.56.78&port=80`。
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
797 2
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure Redis 缓存】Azure Cache for Redis服务中,除开放端口6379,6380外,对13000,13001,15000,15001 为什么也是开放的呢?
【Azure Redis 缓存】Azure Cache for Redis服务中,除开放端口6379,6380外,对13000,13001,15000,15001 为什么也是开放的呢?

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等