Swoole从入门到入土(1)——入坑
入坑一个话题,总得有入坑的理由。有好多话题可供选择,但是思来想去,对于PHPer进阶与其急着去掌握一门新的语言,匆忙地踏足一个新的知识体系,还不如先把php圈子的技能点攒齐了。
话说Swoole诞生之前,php是世界上最好的语言。但很可惜php语言无法支持长连接,始终是个遗憾。而自从Swoole诞生之后,php晋升为太阳系最好的语言。Swoole提供给了php长连接、协程、异步任务、微服务的能力,弥补了php短板,让php有了在即时通讯、物联网、区块链的领域中发力的可能。虽然在Swoole的生态圈子里发生了一些不太友好的事情,但是神仙吵架丝毫不影响Swoole的优秀。接下来,做好准备,让我们一起徜徉在知识的海洋。
在这一系列的文章中,我们会假设大家已经有良好的php基础,对于扩展的编译已经熟练掌握。如果对于相关的知识点不甚了解,可以随时联系博主。
另外,博主使用的操作系统是CentOS 7.5,PHP版本号是7.3.15
这一篇里,我们要了解两个问题:安装Swoole 和 写出一个Swoole的Hello world。
1、安装Swoole
安装Swoole有两种方式,即编译成php的扩展,或者在编译php的过程过静态编译到php中。两种方法都可以让php顺利使用上Swoole。当然,为了编译方便与灵活,笔者会采用扩展的方式进行编译。
因为Swoole自身要求PHP版本号>7.1,gcc版本号>4.8,所以如果需要升级gcc的小伙伴可以运行:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
接着,需要到以下三个地方,下载Swoole扩展的源代码(任选其一):
https://github.com/swoole/swoole-src/releases
http://pecl.php.net/package/swoole
https://gitee.com/swoole/swoole
开始编译,编译过程就是编译的老套路。请看以下栗子:
#简单编译
#进入swoole源码目录
phpize
./configure --with-php-config=/path/to/php-config
make
make install #高级编译
#进入swoole源码目录
phpize
./configure --with-php-config=/path/to/php-config --enable-openssl --enable-http2
make
make install
编译完成之后,进入php.ini中添加extension=swoole.so即可。
为了确认php是否成功载入了swoole扩展,可以执行php -m | grep swoole查看结果。如下图:

2、写出Swoole的Hello World
在写出Swoole的Hello World之前,需要先解决一个问题:在phpstorm中添加swoole的自动提示。
1) 下载https://github.com/wudi/swoole-ide-helper,解压得到目录swoole-ide-helper
2) PhpStorm的菜单项中找到File->Settings->Languages & Frameworks->PHP->inclue path,将swoole-ide-helper目录加入即可。
接下来,我们创建一个文件命令为swoole.php,并从利用Swoole写一段很简单的的http服务代码:
<?php
$http = new Swoole\Http\Server("0.0.0.0", 9501); $http->on("start", function ($server) {
echo "Swoole http server is started\n";
}); $http->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World\n");
}); $http->start();
现在我们还不需要详细知识这段代码每一句什么作用,只需要先了解这段代码实现了一个侦听在9501上的很简单的http服务。
我们运行一下这段代码php swoole.php,之后我们通过浏览器可以看到以下界面:

好了,这一节到这里就大功告成了。之后我们会逐一讨论Swoole这东西可以为我们带来什么不可思议的功能。今天就先到这里吧:)
--------------------------- 我是可爱的分割线 ----------------------------
最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。
Swoole从入门到入土(1)——入坑的更多相关文章
- webpack入坑之旅(三)webpack.config入门
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- webpack入坑之旅(二)loader入门
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack 在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- Angular 从入坑到挖坑 - Angular 使用入门
一.Overview angular 入坑记录的笔记第一篇,完成开发环境的搭建,以及如何通过 angular cli 来创建第一个 angular 应用.入坑一个多星期,通过学习官方文档以及手摸手的按 ...
- Angular 从入坑到挖坑 - Router 路由使用入门指北
一.Overview Angular 入坑记录的笔记第五篇,因为一直在加班的缘故拖了有一个多月,主要是介绍在 Angular 中如何配置路由,完成重定向以及参数传递.至于路由守卫.路由懒加载等&quo ...
- webpack入坑之旅(六)配合vue-router实现SPA
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- webpack入坑之旅(五)加载vue单文件组件
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- webpack入坑之旅(四)扬帆起航
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- webpack入坑之旅(一)不是开始的开始
最近学习框架,选择了vue,然后接触到了vue中的单文件组件,官方推荐使用 Webpack + vue-loader构建这些单文件 Vue 组件,于是就开始了webpack的入坑之旅.因为原来没有用过 ...
- 维多利亚的秘密 golang入坑系统
原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...
- 大神都在看的RxSwift 的完全入坑手册
大神都在看的RxSwift 的完全入坑手册 2015-09-24 18:25 CallMeWhy callmewhy 字号:T | T 我主要是通过项目里的 Rx.playground 进行学习和了解 ...
随机推荐
- Java21 + SpringBoot3整合Redis,使用Lettuce连接池,推荐连接池参数配置,封装Redis操作
目录 前言 相关技术简介 Redis 实现步骤 引入maven依赖 修改配置文件 定义Redis配置类 定义Redis服务类,封装Redis常用操作 使用Redis服务类 总结 前言 近日心血来潮想做 ...
- [转帖]GRUB2 配置文件详解
https://www.cnblogs.com/fluidog/p/15176726.html 1. GRUB2配置文件 GRUB2 的配置文件通常为 /boot/grub2/grub.cfg,虽然此 ...
- [转帖]tidb 搭建私有镜像库
https://docs.pingcap.com/zh/tidb/stable/tiup-mirror 在构建私有云时,通常会使用隔离的网络环境,此时无法访问 TiUP 的官方镜像.因此,TiUP 提 ...
- [转帖]sendfile“零拷贝”、mmap内存映射、DMA
https://www.jianshu.com/p/7863667d5fa7 KAFKA推送消息用到了sendfile,落盘技术用到了mmap,DMA贯穿其中. 先说说零拷贝 零拷贝并不是不需要拷贝, ...
- [转帖]超线程 Smt 究竟可以快多少?
https://www.51cto.com/article/686171.html 刚才我们关闭SMT是把CPU10-CPU19全关了,只留下每对里面的1个CPU,也就是留下了CPU0-CPU9. 默 ...
- [转帖]linux 查看CPU 内存的信息
https://bbs.huaweicloud.com/blogs/302929 [摘要] ECS信息规格:2vCPUs | 4GiB | kc1.large.2镜像:openEuler 20.0 ...
- [转帖]diskspd的使用
https://www.cnblogs.com/tcicy/p/10005374.html 参数翻译 可测试目标: file_path 文件abc.file #<physical drive n ...
- 一种读取亿级doris数据库的方法
工作中,常常需要将线上doris同步至集市.读取doris数据同读取常规mysql基本相同.如果数据行小于千万,比较简单的方式直接单节点连接.读取和存储.Python示例如下: def get_dat ...
- vue 路由守卫是否携带token
//整个实例出来 配置路由守卫 const router = new Router({ //这里面是路由配置哈 }) router.beforeEach((to, from, next) => ...
- .net Core IsDefined、GetValues、HasFlag 使用
IsDefined可以用于判断传入的单个值是否属于该枚举 GetValues检索指定枚举中常量值的数组 HasFlag 可以用于判断传入的多个值是否属于该枚举 先来个例子: public enum B ...