文档章节

Swoole入门(1)☞初识swoole

ali安东尼
 ali安东尼
发布于 2017/09/11 14:54
字数 947
阅读 2
收藏 0
点赞 0
评论 0

###什么是swoole?

Swoole允许通过PHP构造一个新的Server,提供跟Apache类似的功能,监听请求,作出响应。

这个时候PHP不再是写Web业务逻辑的PHP了,它参与了Server的构建,成为一个Network Server,也不需要依赖与apache/nginx,因此访问该server是通过cli模式,不能再通过浏览器访问了。

###PHP和swoole到底是什么关系呢?

很多编码人都认为PHP语言大部分都用来做Web开发,更有人认为只能做Web;把PHP黑的可惨,此次我必须得替天行道,匡扶正义,还PHP一个清白!!

作为一个PHPer,我必须承认PHP很难实现如:网络通信编程、异步IO、异步文件读写,异步DNS查询等牛逼哄哄的功能,而这时候swoole诞生了,它是PHP的一个标准扩展;是一个基于网络通信和异步IO的引擎,有了它就能更加方便实现如上说的各种功能。

###使用案例

一开再质疑swoole的质量和广度,也不清楚到底学不学是好,万一辛苦学下了,发现没有人维护了,淘汰了,那才杯具呢,之后百度一通,发现虎牙直播、YY语音、战旗TV这些大户都在使用swoole,那我有何担心呢?

再看看swoole的社区,发觉社区论坛寥寥无几,毫无生气,版本迭代有点慢;又开始担心起来了,不过再仔细想想,学习swoole,可以学习网络协议、阻塞、IO复用、多进程、websocket、异步mysql/redis各种模糊的东西,足以足以。

###开发环境

系统环境:Ubuntu 16.04

开发环境:PHP7.0+Nginx+FPM

鄙人再安装swoole扩展的时候遇到个问题,phpinfo是有swoole信息了,但是每次实例化都显示无法识别swoole对象,找了很久发现是在配置php.ini添加swoole模块的时候需要对:/etc/php/7.0/cli/php.ini/etc/php/7.0/fpm/php.ini两个文件添加。

更简单的方法是使用pecl一键安装,毕竟swoole已经被官方PHP收录了。省了很多麻烦事情,命令如下:pecl install swoole

###swoole结构

在编码之前最好熟悉下swoole大体结构,不然编码下去也是一头雾水,云里雾里的:

Master主进程:

swoole启动后主线程,主进程由多个Reactor线程,基于epoll/kqueue进行网络事件轮询。

主进程负责监听server socket,当有请求过来时,Master会评估每个Reactor线程的连接数量。将此连接分配给连接数最少的reactor线程,再转发到worker进程进行处理。

Manager进程:

swoole启动后会创建一个单独的Manager进程,用来管理worker进程的生命周期并监视进程的异常和回收。

当Reactor线程通过管道传给Manager进程的时候,Manager进程会fork出一个Worker进程或者Task进程

同时当Worker/Task进程发生致命错误或者运行生命周期结束时,管理进程会回收此进程,并创建新的进程。

Worker进程:

Worker进程用来发送/接收数据,处理一些业务逻辑等任务。

Task进程:

Task进程目的是为了解决在业务代码中,有些逻辑部分不需要马上执行。利用task进程池,可以方便的投递一个异步任务去执行,在Worker进程空闲时再去捕获任务执行的结果。

###结语

各位对swoole有了大概的了解把,下一节就开始实现一个简单的实例!

由睿江云人员提供,想了解更多,请登陆www.eflycloud.com

© 著作权归作者所有

共有 人打赏支持
ali安东尼
粉丝 3
博文 192
码字总数 173101
作品 0
广州
swoole tcp client/server-献给swoole初初初初初初学者们

环境 PHP5.6.17 Swoole 1.8.8-stable Ubuntu 14.04 (use_namespace 需要开启命名空间) 学前提要 Server 角色并不是一成不变的,当 Server 在请求数据时,实际上就是 Client,相对的 Client 在...

krasen ⋅ 2016/08/29 ⋅ 2

swoole| swoole 协程初体验

date: 2018-5-30 14:31:38 title: swoole| swoole 协程初体验 description: 通过协程的执行初窥 swoole 中协程的调度; 理解协程为什么快; swoole 协程和 go 协程对比 折腾 swoole 协程有一段...

daydaygo ⋅ 06/14 ⋅ 0

Swoole 分布式通讯框架--SwooleDistributed

SwooleDistributed 是swoole分布式系统的实现,他提供了一套基于swoole扩展的分布式通讯框架。 结构图: SwooleDistributed 不仅提供了分布式搭建的必要设施,还提供了4大组件帮助你提高编写...

白_猫 ⋅ 2016/07/25 ⋅ 3

Swoole入门指南:PHP7安装Swoole详细教程

Swoole简介 Swoole是:PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,...

阿泽Aze ⋅ 01/05 ⋅ 1

swoole项目思维转换 -- 前篇

PHP是最好的语言,Swoole重新定义了最好的语言,这当然是个梗了,不过php做为一个入门低、开发快、执行效率高的一门语言,而在以快速著称的pc互联网时代,无可争议的成为首选,这是php的优势...

杨太化 ⋅ 2015/10/15 ⋅ 0

编译swoole2.1.0时报错

linux环境 make时报错 In file included from /usr/include/sys/mman.h:25:0, from /usr/local/swoole-2.1.0/include/swoole.h:65, from /usr/local/swoole-2.1.0/phpswoole.h:48, from /usr......

Lcoper ⋅ 02/23 ⋅ 0

swoole-1.7.21 版本已发布,BUG 修复版本

swoole-1.7.21 版本已发布,此版本更新内容如下: 主要更新: 修复swooleclient同步模式在服务器主动关闭时发生内存泄漏的问题 修复POST/文件上传超过8K无法处理的问题 增加swoolehttprespo...

matyhtf ⋅ 2015/12/01 ⋅ 13

关于workerman的问题

为了做推送,之前借鉴网上的代码用php写socket服务端,页面是websocket,问了oscers,向我推荐swoole,workerman swoole是用C写的扩展,由于C学的不好,就准备搞workerman了,看了gateway类,好多都...

hphper ⋅ 2015/02/12 ⋅ 10

​Swoole 宣布由个人项目转为组织项目

Swoole由rango创建发布后,受到了很多的朋友认可,也广泛使用于各大互联网公司。为了swoole的长远发展,rango就这么愉快的决定了把swoole由个人项目变成一个组织项目,并设置几名核心团队成员...

半桶水_桶哥 ⋅ 2014/07/10 ⋅ 18

Swoole-1.8.9 发布,增加命名空间别名

PHP的异步、并行、高性能网络通信引擎Swoole 已发布 1.8.9 版本。此版本增加了命名空间别名,可在PHP代码中同时使用namespace类名或下划线风格类名。另外此版本修复了近期发现的一些BUG,其中...

matyhtf ⋅ 2016/08/18 ⋅ 27

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 41分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部