- 博客(68)
- 收藏
- 关注
原创 php 基于ICMP协议实现一个ping命令
ICMP 的全称是Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。
2023-02-26 13:27:47
1625
1
原创 一个线程如何处理多个连接?(非阻塞IO)
著名的C10K并发连接问题(即单机1万个并发连接问题),“C10K”概念最早由Dan Kegel发布于其个人站点,即出自其经典的《》一文。
2023-01-20 21:57:04
2180
原创 颤抖开篇,从php角度谈谈IO模型(BIO)
如果客户端创建好连接后,但是一直不发数据,通常大部分情况下,网络连接也并不总是有数据可读,那么在空闲的这段时间内,服务端进程就会一直处于阻塞状态,无法干其他的事情。在这个阶段,网络数据包到达网卡,通过DMA的方式将数据包拷贝到内存中,然后经过硬中断,软中断,接着通过内核线程ksoftirqd经过内核协议栈的处理,最终将数据发送到内核Socket的接收缓冲区中。数据拷贝阶段: 当数据到达内核Socket的接收缓冲区中时,此时数据存在于内核空间中,需要将数据拷贝到用户空间中,才能够被应用程序读取。
2023-01-02 21:56:34
964
原创 php 进程池设计与实现,phper必学!
在php开发过程中经常使用的 php-fpm 使用的进程模型就是进程池,学习进程池知识能让我们更好理解php-fpm 的运行模式,进程池也是php中主流的并发服务器解决方案包含我们的 Workerman 也是用的是进程池,编写一个简单的进程池可以帮助我们更好学习Workerman 源码,了解Workerman 为何如此设计池是一组,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分
2022-11-27 21:08:28
1011
原创 PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题?
就是你打开一个mysql客 户端黑窗口,进入操作之后,又隔了N秒你不操作了,之后你想继续操作,对不起,mysql会在之前关闭了你的那个连接,mysql会帮你自动重新连接。最近公司有个项目,要举办一个线上活动,我这边负责提供接口记录用户访问记录,与操作记录,由于活动参与人数可能比较多,为了不影响正常业务运行,我们决定不在接口中直接写入数据库,而采用异步写入,也就是调用接口,数据先写入reids 队列,然后在编写一个消费进程读取队列消息写入数据库。但是,我们的 Redis 服务器端没有给我们报任何错误信息呀。
2022-11-16 22:45:55
1765
转载 如何在 60 秒内分析优化 Linux 性能?非常实用!!!
在这个分析的过程中,我们也要时刻注意我们已经排除过的资源问题,以便缩小我们定位的范围,给下一步的定位提供更明确的方向。比如,假设现在系统出了问题,你去查看这三个值,发现 1 分钟的负载值比 15 分钟的负载值要小很多,那么你很有可能已经错过了系统出问题的时间点。设备繁忙的程度,表示每一秒之内,设备处理 IO 的时间占比。us,sy,id,wa,st:#CPU 时间的各项指标(对所有 CPU 取均值),分别表示:用户态时间,内核态时间,空闲时间,等待 io,偷取时间(在虚拟化环境下系统在其它租户上的开销)
2022-11-01 12:12:16
570
原创 php 进程通信系列 (五)socket unix域套接字
现实世界中两个人进行信息交流的整个过程被称作一次通信(Communication),通信的双方被称为端点(Endpoint)。工具通讯环境的不同,端点之间可以选择不同的工具进行通信,距离近可以直接对话,距离远可以选择打电话、微信聊天。这些工具就被称为 Socket。同理,在计算机中也有类似的概念:在 Unix 中,一次通信由两个端点组成,例如 HTTP 服务端和 HTTP 客户端。端点之间想要通信,必须借助某些工具,Unix 中端点之间使用 Socket 来进行通信。
2022-10-03 23:37:03
1768
原创 php 进程通信系列 (四)共享内存
现代操作系统,对于内存管理,采用的是虚拟内存技术,也就是每个进程都有自己独立的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程 A 和 进程 B 的虚拟地址是一样的,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。这样这个进程写入的东西,另外一个进程马上就能看到了,不需要经过数次的拷贝(比如从输入缓冲区中拷贝到文件中、再拷贝到输出缓冲区中等),大大提高了进程间通信的速度。通过上图可知,共享内存是通过将不同进程的虚拟内存地址映射到相同的物理内存地址来实现的。
2022-09-04 14:33:37
522
原创 php 进程通信系列 (三)信号量
为什么会出现这种情况,我们知道单核cpu系统里为了实现多个程序同时运行的假象,操作系统通常都采用时间片调度,一个进程时间片用完就切换下一个进程运行,加上我们的高级语言不是每一行代码都是原子性的,比如。举个生活的同步例子,你肚子饿了想要吃饭,你叫妈妈早点做菜,妈妈听到后就开始做菜,但是在妈妈没有做完饭之前,你必须阻塞等待,等妈妈做完饭后,自然会通知你,接着你吃饭的事情就可以进行了。另一个是 V 操作,这个操作会把信号量加上 1,相加后如果信号量 ......
2022-08-27 19:57:45
515
原创 php 进程通信系列 (二)消息队列
函数写入队列前对数据进行序列化,可以把第3个参数设置为false,不过需要注意的是,如果写入数据不进行序列化,那么使用。这是因为php 内部实现对写入数据做了序列化操作,导致写入消息队列的字节长度为12而不是5个字节长度。函数来实现操作消息队列,共享内存,与信号量。读取3次队列数据后父进程杀死子进程,父进程回收子进程,然后父进程退出,最后销毁消息队列。创建用户为root ,操作权限为666,写入了一条数据,占用了12个字节的队列。因为消息队列内容被读取,消息队列占用字节被清空为0,消息队列消息条数也为0。.
2022-08-07 21:26:28
550
原创 php 进程通信系列 (一) 命名管道
数据传输一个进程需要将它的数据发送给另一个进程。通知事件一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资源共享多个进程之间共享同样的资源。为了做到这一点,需要内核提供互斥和同步机制。进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有状态信息进程不是孤立的,一个足够大的项目绝对不是单一的进程可以支撑的起的。...
2022-07-23 12:39:30
641
原创 php 手写一个完美的守护进程
上期我们详细学习了会话的概念以及用法,会话,进程组,终端的理解对本篇讲述的守护进程极其重要,如还不理解相关概念建议翻看我往期关于会话,进程组,终端文章。守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。并且不跟任何的控制终端关联,如果想让某个进程不因为用户或中断或其他变化而影响,那么就必须把这个进程变成一个守护进程。常见的守护进程包括系统日志进程syslogd、 we
2022-06-19 18:18:42
1517
1
原创 linux php 进程进阶(七)sid(会话)
说起会话,我们经常登录到linux系统, linux是一个多用户多任务的分时操作系统,必须要支持多个用户同时登陆同一个操作系统,当一个用户登陆一次终端时就会产生一个会话,执行各种各样的程序,这都牵涉到会话。会话是基于连接的。会话的源头,就是用户与系统之间连接的启用。每个会话有一个会话首进程,即创建会话的进程,建立与终端连接的就是这个会话首进程,也被称为控制进程。一个会话可以包括多个进程组, 这些进程组可被分为一个前台进程组和一个或多个后台进程组。为什么要这么分呢?前台进程组是指需要与终端进行交互的进程组
2022-06-11 19:14:35
700
原创 linux php sftp实现跨服务器文件传输
linux php sftp实现跨服务器文件传输什么是SFTP?SFTP 与 FTP 区别终端使用sftpsftp可用命令php 中通过SSH2 扩展模块 使用SFTP安装php SSH2 扩展编写SFTP使用类什么是SFTP?SFTP是一种安全的文件传输协议,一种通过网络传输文件的安全方法;它确保使用私有和安全的数据流来安全地传输数据。SFTP要求客户端用户必须由服务器进行身份验证,并且数据传输必须通过安全通道(SSH)进行,即不传输明文密码或文件数据。它允许对远程文件执行各种操作,有点像远程文件
2022-05-13 23:45:51
2748
原创 Linux nginx 玩转日志模块
NGINX 日志访问日志配置规则 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';log_format # 日志格式$r
2022-05-04 15:30:36
1991
原创 Linux nginx 基础介绍与安装版本选择
Linux nginx 基础介绍与安装版本选择Nginx 版本类型Nginx yum 安装了解 Nginx 配置文件Nginx 编译参数详解(源码编译安装时使用)Nginx 基本配置创建Nginx 虚拟主机Nginx 版本类型1.进入nginx官网下载页面:http://nginx.org/en/download.html 提供了 3 种类型的 nginx 版本可下载分别是:Mainline version:主线版本,即开发版本Stable version:最新稳定版,生产环境上建议使
2022-05-04 15:28:41
5273
1
原创 linux php 进程进阶(六)进程组
linux php 进程进阶(六)进程组进程组进程组进程组,就是一个或是多个进程的集合,一个进程都有一个标识组ID,表示该进程属于哪个进程组bash进程启动之后,它会自己setsid把自己设置为会话首进程,也会设置自己为组长进程.........
2022-03-12 22:50:28
912
原创 nosql Redis基础介绍
这里写自定义目录标题Redis 概念redis支持数据类型Redis 应用功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Redis 概念Redis(REmote DIctionary Server)是用C语言开发的高性能键值对
2022-03-08 14:13:40
313
原创 linux bash进程与终端
linux bash进程与终端终端虚拟终端登录后如何通信总结终端什么事终端?计算机包含输入单元,主机【cpu,内存】,输出单元输入单元我们以键盘表示,输出单元一般为显示器【音频输出】一般我们将输入输出单元统称为"终端",也就是说终端能产生数据,也能显示数据终端分为物理终端和软件终端物理终端:传统的显示器,键盘,鼠标,只要能实现数据输入输出[read,write]统称为终端软件终端【伪终端】:主要通过tcp/ip协议实现的终端,它能模拟一个能实现”数据输入和数据输出的终端
2022-03-06 21:41:10
3388
原创 js逆向 freightsmart航运--webpack逆向
声明本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!freightsmart 登录 webpack 逆向,下面是逆向流程网页地址:aHR0cHM6Ly9mcmVpZ2h0c21hcnQub29jbC5jb20v1.进入网页点击右上角登录按钮,触发登录查看登录接口,如果没有账户可以注册一个。2. 查看post 发送的参数,发现有3个参数,第一个是username 账号名称,password为登录密码,第三个参数为空,先不管,
2022-03-06 17:00:18
1252
原创 Linux awk命令实践
awkawk 核心价值是取列附加作用:增,删awk命令格式awk [option] ‘pattern{action}’ file …awk [参数] ‘条件{动作}’ 文件…参数选项解释说明-F指定字段分隔符 *变量名解释$n当前记录的第n行$0当前整行记录NF当前记录中的列的个数,就是有多少列${NF-n}倒数第n列,n为数字NR已经读出的记录数,就是行号,从1开始取列的简
2022-03-06 09:54:26
597
原创 linux sed 命令实践
sed说明sed 是stream editor(字符流编辑器)的缩写,sed是操作,过滤和转换文本内容的强大工具,常用功能有对文件实现快速增删改查,其中查询功能中最常用的是过滤(过滤指定字符串)和取行(取出指定行)。语法格式sed 【选项】 【sed内置命令字符串】 【输入文件】options【选项】解释说明-n取消默认sed 的输出,常与sed内置命令的p连用输出想要内容-i直接修改文件内容,而不是输出到终端,修改前备份 -i.bak-e允许多次编辑
2022-02-19 19:09:19
272
原创 linux php 进程进阶(五) signal(信号)
linux php 进程进阶(五) signal(信号)signal信号与中断流程介绍常用中断信号中断信号处理程序信号集发送信号posix_killSIGALRM 信号SIGCHLD信号pcntl_signal 缺点(下面是引用韩天峰大佬的文章 原文地址 [PHP官方的pcntl_signal性能极差](http://rango.swoole.com/archives/364))signal信号与中断流程介绍信号 是指软件中断信号,简称软中断中断源(中断信号产生位置):终端设备驱动
2022-02-13 17:08:33
1209
原创 linux php 进程初探(五)进程调度
进程调度pcntl_fork 创建一个子进程,这时候会存在父进程子进程,由cpu调度算法决定先调度哪个进程,一般父进程调度优先级比子进程高,所以我们一般使用 sellp/pcntl_wait 函数先阻塞父进程,让子进程先执行使用 top 命令观察进程状态PR (priority) 代表进程优先级NI (nice) 进程nice值越小则优先级越高,进程的nice值越小,则进程的PR优先级越高,cpu就先运行这个进程php 的 pcntl 扩展也为我们提供了控制进程优先级的函数 pcntl
2022-02-08 23:08:37
1129
原创 linux php 进程进阶(四) exec
linux exec 函数功能:用来执行一个程序exec 一般的用法是父进程先创建一个子进程,然后子进程在调用这个函数在php 使用 pcntl 进程扩展的 pcntl_exec 这个函数实现相同功能,它内部系统调用是 execve需要注意 pcntl_exec 函数第一个参数必须是可执行的二进制文件路径,或是在文件第一行指定了 一个可执行文件路径标头的脚本(比如文件第一行是#!/usr/bin/php的php脚本)错误写法 pcntl_exec('demo.php',['a'],['b
2022-02-05 20:18:38
1285
原创 linux php 进程初探(四)进程退出
linux php 进程初探(四)进程退出#基本概念一个程序启动之后,会变成一个进程,进程在什么情况下会退出呢?以下情况下进程会退出:运行到最后一行语句运行时遇到return时运行时遇到exit()函数的时候程序异常的时候进程接收到中断信号在c/c++中还有更多进程退出的情况,本文暂且不表,我们这里只关注php中进程退出的情况一个进程要么是正常结束,要么是异常结束(异常结束大多跟信号有关),不管是何种方式导致进程退出,它都有一个终止状态码,进程结束时并不会真的退出,还会驻留
2022-01-27 15:27:41
2007
2
原创 linux 正则表达式详解
有关正则表达式容易混淆事项本文讲的是Linux 系统中的正则表达式,即 Linux 正则表达式,应用正则表达式的命令就是 grep(egrep),sed,awk,注意,其他普通命令正常情况下无法使用正则表达式。正则表达式与前文讲解的通配符,特殊字符有本质区别,正则在Linux中是通过三剑客(grep(egrep),sed,awk)命令在文件或数据流中过滤内容的。而通配符是大部分普通命令都支持的,它主要用来检查文件或目录的环境变量修改配置后操作时不会出现异常匹配情况vim /etc/profi
2022-01-23 19:46:56
1111
原创 php基础篇 不懂 bit,byte,字符、编码之间的关系,别跟我说你会sock网络编程
php基础篇 不懂 bit,byte,字符、编码之间的关系,别跟我说你会sock网络编程!bit(位)byte(字节)储存空间换算字符编码基本概念字符集ASCii扩展ASCii字符集gb2312字符集gbk字符集Unicode字符集utf-8编码bit(位)数据存储的最小单位。每个二进制数字0或者1就是1个位;byte(字节)64位系统:8个位构成一个字节;即:1 byte (字节)= 8 bit(位);32位系统:4个位构成一个字节;即:1 byte (字节)= 4 bit(位);储存
2022-01-22 14:16:22
581
原创 linux php 进程初探(一) fork
Fork基本概念一个进程,包括代码、数据和分配给进程的资源。fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
2022-01-19 21:59:46
662
原创 linux php 进程进阶(三) 僵尸进程
僵尸进程基本概念我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符,进程ID仍然保存在系统中,极大浪费了
2022-01-19 16:48:23
1158
原创 linux php 进程进阶(二) 孤儿进程
孤儿进程我们经常听别人说到孤儿进程(Orphan Process),究竟是什么呢。根据公开资料的解释,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。孤儿进程与僵尸进程是完全不同的,后面会详细介绍僵尸进程。而孤儿进程借用了现实中孤儿的概念,也就是父进程不在了,子进程还在运行,这时我们就把子进程的PPID设为1。前面讲PID提到,操作系统会创建进程号为1的init进程,它没有父进程也不会退出,可以收养系统的孤儿进程。init进程是Linux系统下的奇怪进程,这个进程是以普通
2022-01-19 13:01:36
750
原创 linux php 进程进阶(一) 进程锁(文件锁)
进程锁这里的进程锁与线程锁、互斥锁、读写锁和自旋锁不同,它是通过记录一个PID文件,避免两个进程同时运行的文件锁。进程锁的作用之一就是可以协调进程的运行,例如crontab使用进程锁解决冲突提到,使用crontab限定每一分钟执行一个任务,但这个进程运行时间可能超过一分钟,如果不用进程锁解决冲突的话两个进程一起执行就会有问题。通过进程锁可以解决进程间同步的问题。使用PID文件锁还有一个好处,方便进程向自己发停止或者重启信号。Nginx编译时可指定参数–pid-path=/var/run
2022-01-18 20:22:25
2805
原创 linux php 进程初探(三)进程越多越好?
进程越多越好?前面提到多进程的并行可以提高并发度,那么进程是越多越好?一般遇到这种问题都回答不是,事实上,很多大型项目都不会同时开太多进程。下面以支持100K并发量的Nginx服务器为例。举个例子: NginxNginx是一个高性能、高并发的web服务器,也就是说它可以同时处理超过10万个HTTP请求,而它建议的启动的进程数不要超过CPU个数,为什么呢?我们首先要知道Nginx是Master-worker模型, Master 进程只负责管理Worker进程,而Worker进程是负责处
2022-01-17 16:40:40
1640
原创 linux php 进程初探(二) 并行与并发傻傻分不清楚?
并发与并行并发(Concurrently)和并行(Parallel)是两个不同的概念。借用Go创始人RobPike的说法,并发不是并行,并发更好。并发是一共要处理(dealwith)很多事情,并行是一次可以做多少事情。举个简单的例子,华罗庚泡茶,必须有烧水、洗杯子、拿茶叶等步骤。现在我们想尽快做完这件事,也就是“一共要处理很多事情" ,有很多方法可以实现并发,例如请多个人同时做,这就是并行。并行是实现并发的一种方式,但不是唯一的方式。我们一个人也可以实现并发,例如先烧水、然后不用等水烧开就去洗杯子
2022-01-17 15:59:17
568
原创 linux php 进程初探
linux 进程初探定义PIDPPID拿到PID,PPID有什么用呢?马上揭晓。进程名字注意进程参数进程输入与输出定义根据维基百科的定义,进程(Process)是计算机中已运行程序的实体。用户下达运行程序的命令后,就会产生进程。进程需要些资源才能完成工作,如CPU使用时间、存储器、文件以及1/0设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。我们简单总结下,进程就是代码运行的实体。这里补充一点,进程不一定都是正在运行的,也可能在等待调度或者停止,进程状态将在后续详细介绍。PID
2022-01-17 15:25:59
963
原创 Centos7 Mysql5.6.40 高可用架构--MHA-vip功能(应用透明)
Centos7 Mysql5.6.40 高可用架构--MHA-vip功能(应用透明)上传源码包里的应用漂移脚本master_ip_failover转换脚本字符预防中文字符导致错误dos2unix master_ip_failover编辑 master_ip_failover 脚本添加下面命令:my $vip = '10.0.0.129/24';my $key = '0';my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";my $
2022-01-13 12:45:10
1365
1
原创 linux 一篇带你掌握 通配符 与 特殊字符
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2022-01-12 22:36:52
333
原创 某度翻译接口 参数js逆向
某度翻译接口 参数js逆向声明流程声明本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!流程接口地址:https://fanyi.baidu.com/v2transapi?from=zh&to=en打开首页 https://fanyi.baidu.com,进入调试模式下面是逆向流程调试几次发现需要分析接口参数有,sign(如果需要翻译的字符串改变这个值也会改变,需要分析)from: zh # 翻译的语言
2022-01-08 23:32:43
514
原创 linux 一文带你彻底搞懂特殊权限位suid,sgid,sticky
linux 特殊权限位suid,sgid,sticky详解suid为什么会有suid?suid核心小结sgid粘滞位sticky bit(sbit)特殊权限位说明 表格suidlinux系统有9位基本权限位,但除了这9位基础权限还有额外3位权限位,总共12位权限这额外3位权限分别为:suid,sgid,stickysuid(setuid)位通过S字标识。存在于基本权限的用户权限位x权限对应的位置。如果用户权限位对应的x权限位上有x权限,则suid就用小写s标识suid的s对应数
2022-01-08 21:42:32
9785
1
原创 pbcms 文章新增 修改 实现自动百度推送
pbcms 文章新增 修改 实现自动百度推送pbcms介绍功能目标实现pbcms介绍PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统,是一套高效、简洁、 强悍的可免费商用的PHP CMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。功能目标实现文章添加,修改页面自动推送到百度实现首先找到控制文章的控制器进入
2022-01-04 11:52:24
2092
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人