swoole深入学习 1. swoole初始
0. 前言
swoole在PHP圈火了这么久,从2年前我用node写socket聊天服务器的时候就火了,那时候,经常有类似的文章php+swoole完爆nodejs
之类的文章来吸引眼球,先不说它的好与坏,单单说他的出现,确实给php注入了一股新的活力。
首先,php是单进程的,没法在一个程序块中使用多进程来处理一个复杂的逻辑,即使后来出现了pcntl_fork
模块来处理多进程,但是它比较鸡肋,并不适用于windows
平台,其实最大的问题是它使用起来非常之复杂和繁琐,难以理解。
其次,php并不支持异步,这一点恰恰是nodejs
平台所擅长的。所以,在处理一些高并发高负载的请求的时候,我们往往会考虑用nodejs
来做。
再者,php并不适合做TCP,socket之类的长连接,第一是性能问题,第二,我个人觉得还是复杂和繁琐,使用起来会非常吃力,特别是对socket, TCP/UDP, 网络IO等底层的东西并不是很熟悉(比如现在的我)的时候,用起来更是吃力。
那么,有没有一种办法,能够让php很好的支持异步、异步、简单的使用tcp/udp/socket服务呢。当当当。swoole应运而生了!!!
1. swoole 简介
官网是:http://www.swoole.com/ ,是大神韩天峰(Rango)
的作品,我有幸在B站的一次技术会议上,见到了大神,很平易近人的一个大叔。
swoole
发音为 死沃尔
, 并不是死喔了
, 官网给它的介绍是:
swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
先不说这些玩意儿怎么用,但看这些描述,简直就是吊炸天啊,没swoole之前,基本是在用其他的语言诸如c++
,Go
等静态语言来写这些服务了,而现在,phper们,你们完全可以用swoole协助用PHP语言写这些牛逼的玩意了。
2. swoole运行机制
在进行系统的学习swoole之前,先来说下swoole的原理和机制,我觉得知道了会对它有一个大致的了解。
Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。
也就是说,swoole就是个披了php外衣的nginx,大量的功能都是用c来实现。一些功能的调用其实并没php什么事,它只是个纯粹的胶水,有什么功能全用c在实现,然后执行完成再回调给php。
所以,你相当于在用php语法来写底层的c服务,你并不需要了解底层的实现逻辑,你会用php就足够了,因缺思婷~
3. swoole提供的功能库。
在说下swoole提供了哪些功能给我们用,以为我们用到哪些服务时,可以用swoole来帮我们实现。
- [X] http服务 ,编写一个简单的web server。
- [X] TCP/UDP服务 ,编写一个消息接受处理系统。
- [X] 异步,可以异步的处理请求。
- [X] 并发 ,可以并发的处理同一个业务逻辑。
- [X] socket,socket通讯处理技术。
- [X] 毫秒级别定时器,可以在php中使用定时器了。
- [X] 协程,相比线程更稳定和好用。
如果你的业务中,有用到以上等特性,你又在用使用php,那么完全可以用swoole来完成了。
4. swoole安装
swoole的安装相对来说很简单,你完全可以把他当做一个普通的php的扩展来安装。
简单记录下:
pecl安装:
pecl install swoole
源码安装:
git clone https://github.com/swoole/swoole-src.git
cd swoole-src
phpize
./configure
make && make install
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
Mac下brew安装:
brew install php56-swoole
brew install php70-swoole
我在学习时候,按照的是目前的最新文档版本: 1.8.11-stable
安装好之后呢。如果你还需要对你想对你的编辑器,比如:phpstrom
对swoole的代码提示功能,就可以下载帮助文件:https://github.com/eaglewu/swoole-ide-helper。
下载这个完成之后呢,当你打开一个项目,在External Libraries上就可以打开一个框,然后把下载的提示文件,加进来:
如果,代码提示没生效,可以选中 Src里的所有文件,右建,Mark as Plain Text,就可以了。
OK,一个简单的介绍和安装就到这里了,下面会着重介绍如何使用swoole。
update 2016.11.29
作者更新了新的 ide-helper文件,更加智能好用,可以根据swoole扩展自己去生成ide-helper文档:
Git 下载这个:https://github.com/swoole/ide-helper
然后 cd ide-helper &&& sudo php dump.php
会生成 output文件夹,这就是ide帮助文件,按照上面的方式加到ide的扩展包里,写代码就能识别了。而且是最新的代码特性。
swoole深入学习 1. swoole初始的更多相关文章
- Swoole 入门学习(二)
Swoole 入门学习 swoole 之 定时器 循环触发:swoole_timer_tick (和js的setintval类似) 参数1:int $after_time_ms 指定时间[毫秒] ...
- swoole深入学习 8. 协程 转
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yangyi2083334/article/ ...
- Swoole 简单学习(2)
Swoole 简单学习(2) swoole之tcp服务器: //创建tcp服务器new swoole_server(string $host,int $port,int $mode=SWOOLE_PR ...
- Swoole http server + yaf, swoole socket server + protobuf 等小结
拥抱swoole, 拥抱更好的php Swoole 是什么? Yaf 是什么? 接触swoole已经4年多了,一直没有好好静下心来学习.一直在做web端的应用,对网络协议和常驻内存型服务器一窍不通.一 ...
- 初学Swoole:PHP7安装Swoole的步骤
本篇文章给大家带来的内容是关于初学Swoole:PHP7安装Swoole的步骤,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 环境 这里不在使用apache做为web server. ...
- Swoole:PHP7安装Swoole的步骤
下载 swoole 首先下载swoole的源码包,这个操作很简单,没有太多说的.(没有wget:brew install wget--mac) wget -c https://github.com/s ...
- swoole深入学习 2. tcp Server和tcp Client
这节来学习Swoole最基础的Server和Client.会通过创建一个tcp Server来讲解. server <?php class Server { private $serv; pub ...
- Swoole源代码学习记录(十五)——Timer模块分析
swoole版本号:1.7.7-stable Github地址:点此查看 1.Timer 1.1.swTimer_interval_node 声明: // swoole.h 1045-1050h ty ...
- swoole深入学习 4. process
swoole-1.7.2增加了一个进程管理模块,用来替代PHP的pcntl扩展.pcntl是php新增的一个多进程扩展,用来实现多进程,但是有很多不完善的地方,swoole 就完善了这些地方,而且使得 ...
随机推荐
- SVM较全面介绍,干货!(转载)
很不错的一篇介绍SVM的文章,证明通俗易懂! 转自:https://blog.csdn.net/v_july_v/article/details/7624837 前言 动笔写这个支持向量机(suppo ...
- Makefile经典教程(一个很棒很清晰的讲解)【转】
转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...
- ubuntu 用 apt get 安装某个包的某个版本
1.首先用如下命令查询你的机器安装了哪些版本: dpkg -l 'apache2*' 2.然后用如下命令查询远程库存在哪些版本: apt-cache madison "libqt5gui5& ...
- JS禁止鼠标右键、禁止全选、复制、粘贴的方法(所谓的防盗功能)
简述:一个防君子不防小人的鸡肋的功能,针对小白还行. 代码如下: <script> //都能支持 document.oncontextmenu = function (e) { retur ...
- javascrip学习之 数据类型和变量
JavaScript 是脚本语言.是一种轻量级的编程语言.是可插入 HTML 页面的编程代码,可由所有的现代浏览器执行. JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{.. ...
- centos系统初始化流程及实现系统裁剪
Linux系统的初始化流程: POST:ROM+RAM BIOS: Boot Sequence MBR: 446:bootloader 64: 分区表 2: 5A kernel文件:基本磁盘分区 /s ...
- totastmessage 触发事件后浮框消失的方法
1. 前言 通过查了官放的文档,发现没有 totastmessage 触发事件后,浮框消失的方法,然后通过研究了下点击关闭时的源码,得到了一个的解决方案. 2. 样例代码如下 $("#dro ...
- C# winform(计算器)
- redhat5 设置静态ip
Last login: Sat Oct 14 16:19:13 2017 # 进入ip凭证文件设置地方 [root@oracle ~]# cd /etc/sysconfig/network-scrip ...
- Reactor模型-多线程程版
1.概述 在Reactor单线程版本的设计中,I/O任务乃至业务逻辑都由Reactor线程来完成,这无疑增加了Reactor线程的负担,高负载情况下必然会出现性能瓶颈.此外,对于多处理器的服务器来说, ...