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

相关文章
|
26天前
|
网络协议
iptables配置tcp端口转发
iptables配置tcp端口转发
34 1
|
1月前
|
负载均衡 网络协议 算法
slb监听协议与端口
SLB是云服务商提供的负载均衡服务,用于分发客户端请求到多台后端服务器,提升服务可用性和响应速度。关键概念包括监听协议(TCP、UDP、HTTP、HTTPS、TCPSSL)和监听端口。监听协议决定了SLB处理请求的方式,而监听端口则是SLB接收请求的入口。配置时需根据应用选择合适协议和端口,并可设置负载均衡算法(如轮询、最少连接等)。客户端应通过SLB统一入口访问后端服务,避免绕过SLB导致的问题。
56 2
|
1月前
|
负载均衡 网络协议 安全
slb选择监听协议和端口
阿里云SLB中,监听协议(TCP、HTTP、HTTPS)与端口(80、443等)决定客户端请求的处理方式。TCP适用于纯TCP或自处理HTTP的场景,HTTP用于智能调度Web服务,HTTPS提供安全的HTTP传输。监听端口通常匹配应用标准,如80 for HTTP,443 for HTTPS。配置时,可考虑HTTPS重定向和传递`X-Forwarded-Proto`头以识别请求来源。选择应基于业务需求和安全考虑。
31 3
|
6月前
|
安全 Linux 网络安全
Centos 6.8下修改SSH服务默认端口,看这一篇就够了
Centos 6.8下修改SSH服务默认端口,看这一篇就够了
128 0
|
5月前
|
数据采集 Prometheus 监控
监控利器之Prometheus基于Blackbox_exporter监控服务的端口
监控利器之Prometheus基于Blackbox_exporter监控服务的端口
286 0
|
19天前
|
Linux Apache
CentOS 7 源码安装LAMP环境源 和apache监听别的端口
CentOS 7 源码安装LAMP环境源 和apache监听别的端口
13 0
|
1月前
|
网络协议
TCP 和 UDP 可以使用同一个端口吗?
【2月更文挑战第9天】
54 0
TCP 和 UDP 可以使用同一个端口吗?
|
2月前
|
网络协议
TCP和UDP和端口
TCP和UDP和端口
22 1
|
2月前
|
网络协议 Linux 网络架构
【Cisco Packet Tracer】运输层端口与TCP的作用
【Cisco Packet Tracer】运输层端口与TCP的作用
28 0
|
3月前
|
运维 安全 数据库
cmd中使用telnet检测远程的ip及端口是否处于监听状态
cmd中使用telnet检测远程的ip及端口是否处于监听状态
31 1