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();

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 测试截图

image-20210427192457010

infoClient.php 测试截图

image-20210427190951718

相关文章
|
4月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
4月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
716 2
|
22天前
|
网络协议 API
检测指定TCP端口开放状态免费API接口教程
此API用于检测指定TCP端口是否开放,支持POST/GET请求。需提供用户ID、KEY、目标主机,可选指定端口(默认80)和地区(默认国内)。返回状态码、信息提示、检测主机、端口及状态(开放或关闭)。示例中ID和KEY为公共测试用,建议使用个人ID和KEY以享受更高调用频率。
38 14
|
1月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
140 5
|
1月前
|
网络协议 API
检测指定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`。
|
2月前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
4月前
|
监控 网络协议 Linux
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
|
4月前
|
网络协议 网络安全 Python
电脑中 TCP/UDP 端口是否开放的测试:令人意想不到的神奇策略等你发现!
【8月更文挑战第19天】在网络管理和维护中,常需确认TCP/UDP端口是否开放以确保服务运行顺畅。端口如同计算机对外通信的“门”,TCP提供可靠连接,UDP则快速但无连接。测试端口是否开放的方法多样:可用`telnet`测试TCP端口,如`telnet localhost 80`;UDP测试较复杂,可用`nc`工具,如`nc -u -z localhost 53`。此外,也有在线工具可供选择,但需确保其安全性。
526 1
|
4月前
|
网络协议 Windows
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
在电脑上测试TCP/UDP端口是否开放,还是得网络大佬这招厉害!
833 2
|
5月前
|
人工智能 Serverless API
函数计算产品使用问题之如何在一个Docker容器内运行一个持续监听特定端口的应用程序
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。