
swoole
文章平均质量分 80
会敲代码的喵
热衷于创造的程序猿
展开
-
Swoole源码学习记录(七)——MsgQueue
Swoole版本:1.7.5-beta版本更换通知:从第七章开始,我把分析的源码版本升到了1.7.5-beta。在已经分析过的代码中存在了一些变动,但没有到会影响理解的地步,所以再次不再更新前面的章节。如果确认前面的章节有重大变更需要重新分析的,我会给出声明。 Swoole内部封装了Linux提供的msg queue用于提供消息队列的操作。消息队列的声明在swoole.h文件的360原创 2014-09-05 16:55:41 · 1963 阅读 · 0 评论 -
Swoole源码学习记录(九)——Factory模块(上)
Swoole版本:1.7.5-stableFactory这个命名让我一度认为这是一个工厂模型……这个工厂实际上并不负责生产实例,而是根据类型的不同执行两项任务:Factory实现的功能是一个任务中心,一个task请求进入Factory,会进过dispatch分配、onTask处理、onFinish交付结果一系列流程;FactoryProcess用于管理manager和worker进程,也有对单原创 2014-09-15 12:38:45 · 5145 阅读 · 0 评论 -
Swoole源码学习记录(十)——Factory模块(下)
Swoole版本:1.7.5-stable本章将分析FactoryProcess.c中剩下的函数,这些函数用于操作worker、manager以及writer。这些函数提供了最核心的进程创建、管理等功能,是Swoole的master-worker结构的基石。 先从worker相关的函数开始(manager相关函数基本都涉及操作worker进程)。在FactoryProcess.c中一共原创 2014-09-17 16:51:31 · 2823 阅读 · 0 评论 -
Swoole源码学习记录(一)——进程间共享数据ShareMemory 和 MemoryPool
我接触PHP的时间不长,最开始只认为PHP是用来做网站开发,是一个比JSP要简单的语言。后来,因为工作需要,一位学长建议我使用Ngnix + PHP 搭建应用服务器,并建议使用现有的框架。一番搜索之下,我意外发现了Swoole http://www.swoole.com/ 接下来的半年里,我一直使用Swoole扩展作为我的服务器核心。Swoole稳定而高效的性能以及优秀的架构设计使我的开发原创 2014-08-15 10:55:11 · 7863 阅读 · 0 评论 -
Swoole源码学习记录(五)——锁和信号(二)
Swoole版本:1.7.4-stable二.Mutex互斥锁接下来是Mutex(互斥锁)。Swoole的Mutex实现是基于pthread_mutex*方法族实现的,Rango用一个swMutex结构体封装了mutex的两个属性,结构体定义如下:创建一个互斥锁的函数声明在swoole.h文件的 536 行,声明如下:intswMutex_create(swLock *lo原创 2014-08-22 17:37:08 · 2259 阅读 · 0 评论 -
Swoole源码学习记录(二)——三种MemoryPool(上)
Swoole中为了更好的进行内存管理,减少频繁分配释放内存空间造成的损耗和内存碎片,Rango设计并实现了三种不同功能的MemoryPool:FixedPool,RingBuffer和MemoryGlobal。Rango声明了一个swMemoryPool结构体来表示一个内存池,该结构体在swoole.h头文件中501-507行声明,结构如下:typedef struct _swMemory原创 2014-08-18 16:19:37 · 2637 阅读 · 0 评论 -
Swoole源码学习记录(八)——Reactor模块-epoll
Swoole版本:1.7.5-betaReactor模块可以说是Swoole中最核心的模块之一,正是这些reactor模型为swoole提供了异步操作的基础。Swoole中根据不同的内核函数,提供了四种Reactor封装,ReactorEpoll,ReactorKqueue,ReactorPoll和ReactorSelect。同时,Swoole通过结构体swReactor封装了对于reacto原创 2014-09-10 11:30:36 · 4521 阅读 · 2 评论 -
Swoole源码学习记录(十二)——ReactorThread模块
ReactorThread这一章将分析Swoole的ReactorThread模块。虽然叫Thread,但是实际上使用的是swFactoryProcess也就是多进程模式。但是,在ReactorThread中,所有的事件监听是在线程中运行的(Rango只是简单提到了PHP不支持多线程安全,具体原因还有待请教……),比如在UDP模式下,是针对每一个监听的host开辟一个线程运行reactor原创 2014-09-29 12:22:37 · 3972 阅读 · 1 评论 -
Swoole源码学习记录(十五)——Timer模块分析
swoole版本:1.7.7-stable Github地址:点此查看1.Timer1.1.swTimer_interval_node声明:// swoole.h 1045-1050htypedef struct _swTimer_interval_node{ struct _swTimerList_node *next, *prev; st原创 2014-11-06 10:08:19 · 2590 阅读 · 0 评论 -
Swoole源码学习记录(六)——Pipe管道
Swoole版本:1.7.4-stablePipe(管道)用于进程之间的数据交互,Linux系统本身提供了pipe函数用于创建一个半双工通信管道,而在swoole中也利用eventfd和unix sock封装了两种管道,使得进程间的通信更加灵活。Swoole提供了一个基本结构体swPipe用于操作不同类型的Pipe,其声明在swoole.h文件的315 – 326 行,声明如下:t原创 2014-08-26 15:23:09 · 2989 阅读 · 0 评论 -
Swoole源码学习记录(三)——三种MemoryPool(下)
接下来是RingBuffer。这相当于一个循环数组,每一次申请的一块内存在该数组中占据一个位置,这些内存块是可以不等长的,因此每个内存块需要有一个记录其长度的变量。这里贴出swRingBuffer_head结构体的代码:typedef struct _swRingBuffer_item{ volatileuint32_t lock; volatileuint32_t leng原创 2014-08-20 14:31:07 · 1759 阅读 · 0 评论 -
Swoole源码学习记录(十三)——Server模块详解(上)
终于可以正式进入Server.c模块了…… 在之前的分析中,可以看到很多相关模块的声明都已经写在了Server.h中,就是因为这些模块构成了Server的核心部分。而Server本身,则是一个最上层的对象,它包括了核心的Reactor和Factory模块,存放了消息队列的key值,控制着全部的Connection,所有PHP层面的回调函数也在这里指定;同时,Server存放了大量的属性值,这些值决原创 2014-10-16 15:42:24 · 6462 阅读 · 0 评论 -
swoole入门教程05-Swoole的自定义协议功能的使用
环境说明: 系统:Ubuntu14.04 (安装教程包括CentOS6.5)PHP版本:PHP-5.5.10swoole版本:1.7.8-alpha1.为什么要提供自定义协议熟悉TCP通信的朋友都会知道,TCP是一个流式协议。客户端向服务器发送的一段数据,可能并不会被服务器一次就完整的收到;客户端向服务器发送的多段数据,可能服务器一次就收到了全部的数据。而实际应用中原创 2014-11-08 14:40:21 · 9232 阅读 · 1 评论 -
swoole入门教程02-Swoole的Task使用以及swoole_client
第二章 Swoole的task使用以及swoole_client环境说明: 系统:Ubuntu14.04 (安装教程包括CentOS6.5)PHP版本:PHP-5.5.10swoole版本:1.7.6-stable上一章已经简单介绍了如何写一个简单的Echo服务器,并了解了onReceive等几个核心回调函数的使用方法。这一章,我将介绍如何使用Swoole的异步任务Ta原创 2014-10-26 21:03:47 · 13053 阅读 · 4 评论 -
Swoole源码学习记录(十四)——Server模块详解(下)
swoole版本:1.7.6-stable上一章已经分析了如何启动swServer的相关函数。本章将继续分析swServer的相关函数,1.swServer函数分析swServer_addListener该函数用于在swServer中添加一个需要监听的host及port。函数原型如下:// Server.h 438hint swServer_addLi原创 2014-10-28 20:54:08 · 2656 阅读 · 0 评论 -
swoole入门教程03-Timer定时器、心跳检测及Task进阶实例:mysql连接池
环境说明: 系统:Ubuntu14.04 (安装教程包括CentOS6.5)PHP版本:PHP-5.5.10swoole版本:1.7.7-stableGithub地址:https://github.com/LinkedDestiny/swoole-doc1.Timer定时器在实际应用中,往往会遇到需要每隔一段时间重复做一件事,比如心跳检测、订阅消息、数据库备份等原创 2014-10-29 23:15:50 · 11328 阅读 · 1 评论 -
swoole入门教程04-多端口监听、热重启以及Timer进阶:简单crontab
环境说明: 系统:Ubuntu14.04 (安装教程包括CentOS6.5)PHP版本:PHP-5.5.10swoole版本:1.7.7-stableGithub链接:https://github.com/LinkedDestiny/swoole-doc1.多端口监听在实际运用场景中,服务器可能需要监听不同host下的不同端口。比如,一个应用服务器,可能需要原创 2014-11-02 18:40:59 · 11495 阅读 · 3 评论 -
Swoole源码学习记录(四)——锁和信号(一)
Swoole版本:1.7.4-stable写在开头的废话:原本计划是于第四章开始reactor模块的分析,但是发现reactor模块牵扯到太多的其他模块,没法一开始就直接分析reactor,只能将其延后。一番考察之后,我决定从swoole的Lock模块入手继续分析。这一块我的知识储备有很大的空缺,估计会比较吃力…… -----------------------------------原创 2014-08-21 17:45:06 · 2456 阅读 · 0 评论 -
Swoole源码学习记录(十一)——Worker,Connection
Swoole版本:1.7.5-stable本章将分析Swoole中的三个比较重要的模块,Worker,ReactorProcess和Connection。其中Worker和ReactorProcess其实是对前面三章的一个补充,在前面的章节中为了分析结果的流畅性没有针对这些模块做特定分析,在此做出补充。 Worker模块首先是Worker模块。Worker在Swoole中为核心工作原创 2014-09-22 13:19:22 · 2992 阅读 · 0 评论 -
swoole入门教程01-环境搭建及扩展安装
写在前面的废话《swoole源码分析》已经写了13章,整个swoole的核心架构基本都分析的差不多了。于是心里一直以来想整理swoole的文档并写一份教程的想法就再度浮了出来。实话说,我接触swoole乃至接触PHP都仅有9个月的时间,而自7月份以来一直在公司做Android开发,也有没有了使用swoole的机会。所以,现在我只能写出一份入门级教程,帮助刚刚接触swoole的人理解和使用s原创 2014-10-19 16:32:08 · 17876 阅读 · 2 评论