php
文章平均质量分 88
记录工作中的问题,解决方法,学习记录
大雷编程
这个作者很懒,什么都没留下…
展开
-
php 基于ICMP协议实现一个ping命令
ICMP 的全称是Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。原创 2023-02-26 13:27:47 · 1195 阅读 · 2 评论 -
一个线程如何处理多个连接?(非阻塞IO)
著名的C10K并发连接问题(即单机1万个并发连接问题),“C10K”概念最早由Dan Kegel发布于其个人站点,即出自其经典的《》一文。原创 2023-01-20 21:57:04 · 2015 阅读 · 0 评论 -
颤抖开篇,从php角度谈谈IO模型(BIO)
如果客户端创建好连接后,但是一直不发数据,通常大部分情况下,网络连接也并不总是有数据可读,那么在空闲的这段时间内,服务端进程就会一直处于阻塞状态,无法干其他的事情。在这个阶段,网络数据包到达网卡,通过DMA的方式将数据包拷贝到内存中,然后经过硬中断,软中断,接着通过内核线程ksoftirqd经过内核协议栈的处理,最终将数据发送到内核Socket的接收缓冲区中。数据拷贝阶段: 当数据到达内核Socket的接收缓冲区中时,此时数据存在于内核空间中,需要将数据拷贝到用户空间中,才能够被应用程序读取。原创 2023-01-02 21:56:34 · 672 阅读 · 0 评论 -
php 进程池设计与实现,phper必学!
在php开发过程中经常使用的 php-fpm 使用的进程模型就是进程池,学习进程池知识能让我们更好理解php-fpm 的运行模式,进程池也是php中主流的并发服务器解决方案包含我们的 Workerman 也是用的是进程池,编写一个简单的进程池可以帮助我们更好学习Workerman 源码,了解Workerman 为何如此设计池是一组,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分原创 2022-11-27 21:08:28 · 704 阅读 · 0 评论 -
PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题?
就是你打开一个mysql客 户端黑窗口,进入操作之后,又隔了N秒你不操作了,之后你想继续操作,对不起,mysql会在之前关闭了你的那个连接,mysql会帮你自动重新连接。最近公司有个项目,要举办一个线上活动,我这边负责提供接口记录用户访问记录,与操作记录,由于活动参与人数可能比较多,为了不影响正常业务运行,我们决定不在接口中直接写入数据库,而采用异步写入,也就是调用接口,数据先写入reids 队列,然后在编写一个消费进程读取队列消息写入数据库。但是,我们的 Redis 服务器端没有给我们报任何错误信息呀。原创 2022-11-16 22:45:55 · 1561 阅读 · 0 评论 -
php 进程通信系列 (五)socket unix域套接字
现实世界中两个人进行信息交流的整个过程被称作一次通信(Communication),通信的双方被称为端点(Endpoint)。工具通讯环境的不同,端点之间可以选择不同的工具进行通信,距离近可以直接对话,距离远可以选择打电话、微信聊天。这些工具就被称为 Socket。同理,在计算机中也有类似的概念:在 Unix 中,一次通信由两个端点组成,例如 HTTP 服务端和 HTTP 客户端。端点之间想要通信,必须借助某些工具,Unix 中端点之间使用 Socket 来进行通信。原创 2022-10-03 23:37:03 · 1395 阅读 · 0 评论 -
php 进程通信系列 (四)共享内存
现代操作系统,对于内存管理,采用的是虚拟内存技术,也就是每个进程都有自己独立的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程 A 和 进程 B 的虚拟地址是一样的,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。这样这个进程写入的东西,另外一个进程马上就能看到了,不需要经过数次的拷贝(比如从输入缓冲区中拷贝到文件中、再拷贝到输出缓冲区中等),大大提高了进程间通信的速度。通过上图可知,共享内存是通过将不同进程的虚拟内存地址映射到相同的物理内存地址来实现的。原创 2022-09-04 14:33:37 · 346 阅读 · 0 评论 -
php 进程通信系列 (三)信号量
为什么会出现这种情况,我们知道单核cpu系统里为了实现多个程序同时运行的假象,操作系统通常都采用时间片调度,一个进程时间片用完就切换下一个进程运行,加上我们的高级语言不是每一行代码都是原子性的,比如。举个生活的同步例子,你肚子饿了想要吃饭,你叫妈妈早点做菜,妈妈听到后就开始做菜,但是在妈妈没有做完饭之前,你必须阻塞等待,等妈妈做完饭后,自然会通知你,接着你吃饭的事情就可以进行了。另一个是 V 操作,这个操作会把信号量加上 1,相加后如果信号量 ......原创 2022-08-27 19:57:45 · 328 阅读 · 0 评论 -
php 进程通信系列 (二)消息队列
函数写入队列前对数据进行序列化,可以把第3个参数设置为false,不过需要注意的是,如果写入数据不进行序列化,那么使用。这是因为php 内部实现对写入数据做了序列化操作,导致写入消息队列的字节长度为12而不是5个字节长度。函数来实现操作消息队列,共享内存,与信号量。读取3次队列数据后父进程杀死子进程,父进程回收子进程,然后父进程退出,最后销毁消息队列。创建用户为root ,操作权限为666,写入了一条数据,占用了12个字节的队列。因为消息队列内容被读取,消息队列占用字节被清空为0,消息队列消息条数也为0。.原创 2022-08-07 21:26:28 · 379 阅读 · 0 评论 -
php 进程通信系列 (一) 命名管道
数据传输一个进程需要将它的数据发送给另一个进程。通知事件一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资源共享多个进程之间共享同样的资源。为了做到这一点,需要内核提供互斥和同步机制。进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有状态信息进程不是孤立的,一个足够大的项目绝对不是单一的进程可以支撑的起的。...原创 2022-07-23 12:39:30 · 444 阅读 · 0 评论 -
php 手写一个完美的守护进程
上期我们详细学习了会话的概念以及用法,会话,进程组,终端的理解对本篇讲述的守护进程极其重要,如还不理解相关概念建议翻看我往期关于会话,进程组,终端文章。守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。并且不跟任何的控制终端关联,如果想让某个进程不因为用户或中断或其他变化而影响,那么就必须把这个进程变成一个守护进程。常见的守护进程包括系统日志进程syslogd、 we原创 2022-06-19 18:18:42 · 1187 阅读 · 1 评论 -
linux php 进程进阶(七)sid(会话)
说起会话,我们经常登录到linux系统, linux是一个多用户多任务的分时操作系统,必须要支持多个用户同时登陆同一个操作系统,当一个用户登陆一次终端时就会产生一个会话,执行各种各样的程序,这都牵涉到会话。会话是基于连接的。会话的源头,就是用户与系统之间连接的启用。每个会话有一个会话首进程,即创建会话的进程,建立与终端连接的就是这个会话首进程,也被称为控制进程。一个会话可以包括多个进程组, 这些进程组可被分为一个前台进程组和一个或多个后台进程组。为什么要这么分呢?前台进程组是指需要与终端进行交互的进程组原创 2022-06-11 19:14:35 · 620 阅读 · 0 评论 -
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 · 2445 阅读 · 0 评论 -
linux php 进程进阶(六)进程组
linux php 进程进阶(六)进程组进程组进程组进程组,就是一个或是多个进程的集合,一个进程都有一个标识组ID,表示该进程属于哪个进程组bash进程启动之后,它会自己setsid把自己设置为会话首进程,也会设置自己为组长进程.........原创 2022-03-12 22:50:28 · 828 阅读 · 0 评论 -
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 · 1095 阅读 · 0 评论 -
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 · 1084 阅读 · 0 评论 -
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 · 1222 阅读 · 0 评论 -
linux php 进程初探(四)进程退出
linux php 进程初探(四)进程退出#基本概念一个程序启动之后,会变成一个进程,进程在什么情况下会退出呢?以下情况下进程会退出:运行到最后一行语句运行时遇到return时运行时遇到exit()函数的时候程序异常的时候进程接收到中断信号在c/c++中还有更多进程退出的情况,本文暂且不表,我们这里只关注php中进程退出的情况一个进程要么是正常结束,要么是异常结束(异常结束大多跟信号有关),不管是何种方式导致进程退出,它都有一个终止状态码,进程结束时并不会真的退出,还会驻留原创 2022-01-27 15:27:41 · 1885 阅读 · 2 评论 -
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 · 484 阅读 · 0 评论 -
linux php 进程初探(一) fork
Fork基本概念一个进程,包括代码、数据和分配给进程的资源。fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:原创 2022-01-19 21:59:46 · 605 阅读 · 0 评论 -
linux php 进程进阶(三) 僵尸进程
僵尸进程基本概念我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符,进程ID仍然保存在系统中,极大浪费了原创 2022-01-19 16:48:23 · 1072 阅读 · 0 评论 -
linux php 进程进阶(二) 孤儿进程
孤儿进程我们经常听别人说到孤儿进程(Orphan Process),究竟是什么呢。根据公开资料的解释,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。孤儿进程与僵尸进程是完全不同的,后面会详细介绍僵尸进程。而孤儿进程借用了现实中孤儿的概念,也就是父进程不在了,子进程还在运行,这时我们就把子进程的PPID设为1。前面讲PID提到,操作系统会创建进程号为1的init进程,它没有父进程也不会退出,可以收养系统的孤儿进程。init进程是Linux系统下的奇怪进程,这个进程是以普通原创 2022-01-19 13:01:36 · 661 阅读 · 0 评论 -
linux php 进程进阶(一) 进程锁(文件锁)
进程锁这里的进程锁与线程锁、互斥锁、读写锁和自旋锁不同,它是通过记录一个PID文件,避免两个进程同时运行的文件锁。进程锁的作用之一就是可以协调进程的运行,例如crontab使用进程锁解决冲突提到,使用crontab限定每一分钟执行一个任务,但这个进程运行时间可能超过一分钟,如果不用进程锁解决冲突的话两个进程一起执行就会有问题。通过进程锁可以解决进程间同步的问题。使用PID文件锁还有一个好处,方便进程向自己发停止或者重启信号。Nginx编译时可指定参数–pid-path=/var/run原创 2022-01-18 20:22:25 · 2720 阅读 · 0 评论 -
linux php 进程初探
linux 进程初探定义PIDPPID拿到PID,PPID有什么用呢?马上揭晓。进程名字注意进程参数进程输入与输出定义根据维基百科的定义,进程(Process)是计算机中已运行程序的实体。用户下达运行程序的命令后,就会产生进程。进程需要些资源才能完成工作,如CPU使用时间、存储器、文件以及1/0设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。我们简单总结下,进程就是代码运行的实体。这里补充一点,进程不一定都是正在运行的,也可能在等待调度或者停止,进程状态将在后续详细介绍。PID原创 2022-01-17 15:25:59 · 676 阅读 · 0 评论 -
pbcms 文章新增 修改 实现自动百度推送
pbcms 文章新增 修改 实现自动百度推送pbcms介绍功能目标实现pbcms介绍PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统,是一套高效、简洁、 强悍的可免费商用的PHP CMS源码,能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签,只要懂HTML就可快速开发企业网站。官方提供了大量网站模板免费下载和使用,将致力于为广大开发者和企业提供最佳的网站开发建设解决方案。功能目标实现文章添加,修改页面自动推送到百度实现首先找到控制文章的控制器进入原创 2022-01-04 11:52:24 · 1965 阅读 · 1 评论 -
CGI/FastCGI/php-cgi/php-fpm的区别
CGI/FastCGI/php-cgi/php-fpm的区别一、最早的Web服务器最早的Web服务器简单地响应浏览器发来的HTTP静态文件请求,并将存储在服务器上的静态文件(例如: jpg、htm、html)返回给浏览器。如图是处理流程比如我访问:http://www.example.com/index.html,那么网络服务器就会去对应目录中找到index.html这个文件,并返回给浏览器。二、CGI的出现首先说明:CGI是一种协议。事物总是不断发展,网站也越来越复杂,所以出现动态技术。但是转载 2021-07-20 11:59:50 · 518 阅读 · 0 评论