当SWOOLE遇上PHP

一直想写点Swoole的东西,毕竟它重新定义了php,却一直不知道怎么下手写

Swoole涉及的知识点非常多,互为表里,每次想写都发现根本理不出一个头绪

Swoole是一个php的扩展,它的核心目的就是解决php在实现server服务中可能遇到的一系列问题,这些问题用源生的php往往并不能很高效(执行效率)的解决,一般也不会使用php来解决,所以会有说swolle重新定义的php的说法。

毕竟php作为一门成熟的脚本语言,开发效率是先天优势。

扩展的英文名称是Extension,php扩展是用C语言作为开发语言,基于Zend引擎提供的API,编译成的一个动态库。

如果曾经做过类似动态库调用开发的童鞋可能会更好理解一些,例如Android中的NDK开发

在php的配置文件中配置好extension的属性后,就可以引用这个动态库了。

也就是说,swoole本身是用C语言编写的,它可以让php获得一些额外的function。

然后是运行方式,swoole的许多功能都只能运行在cli模式下,而cli模式往往是很多刚接触swoole的phper遇到的第一个问题。

我当初学习swoole的时候也在cli这里栽了个大跟头

我们现在整理一下最常见的php代码执行方式:

  1. 安装apache、php
  2. 配置apache对那个目录进行php解析
  3. 用浏览器访问那个目录的php文件

更多的细节这里就不提了,毕竟我相信每个phper对这个都是很熟悉的。

但这里就开始出现了第一个问题,我们知道,php是一个脚本语言,脚本语言的核心特点在于不用编译,随时执行,而执行脚本的工具就是解析器,而php的解析器就是zend引擎。

严格来说,zend并不是唯一的选择,不过,zend是最官方的。另外,Zend Studio和Zend Engine不是同一个东西,本文中的Zend全部指Zend Engine。

换个角度讲,只要有解析器,写好的php脚本就是可以执行的,而zend引擎与apache之间并没有绝对的关系

实际上,apahce是调用了zend对php脚本进行执行,然后将执行结果输出给了浏览器

所以所谓cli模式(CommandLine,命令行模式),其实就是在命令行下直接调用zend引擎对php脚本进行解析并执行,并获得程序输出结果的php脚本执行方式。

其实php也可以作为shell脚本来使用哦,就像bash shell一样

既然问题讲清楚了,在一个系统中具体怎么操作呢?

本文以CentOS 7.5作为系统环境,swoole是针对linux系统开发的,windows下并不适用。学习swoole的一个前题是懂得基本的linux系统使用。

当安装好php的时候,找到php的安装目录,如果是默认安装的话,可以试试whereis命令

# 某种简单的方法
whereis php
> /usr/local/bin/php;

locate whereis find这些命令都可以试试,目的是找到php

然后我们来写一个最经典的php脚本:

//vi hello_cli.php
<?php
    echo 'Hello PHP Cli';

编写纯php脚本时,php标签不要封口

然后我们在shell里执行它:

/usr/local/bin/php hello_cli.php
> Hello PHP Cli

这段代码中的第一个php,是一个可执行文件,它接受一个php脚本文件作为输入参数,并解析执行这个php脚本文件(通过zend)。

没有错,第一个cli模式下的php程序就被你执行成功了!

默认情况下,php都会被安装在了$PATH的目录下,那就可以直接省略路径前缀了,下文中调用php的时候,全都省略了路径前缀。

因为swoole是pecl的项目,所以使用pecl安装是最简单的方法,强烈推荐第一次接触的童鞋先使用pecl安装,在熟悉了swoole之后,再考虑使用编译安装的方式以获取更多进阶功能。

pecl这个工具基本都会被安装在与php相同的目录下(往往也都是$PATH目录)

pecl install swoole

执行以下命令查看是否安装成功:

php -m | grep swoole
> swoole

如果正确的输出了swoole,那么恭喜你,这次安装很成功

另一个常见的比较麻烦的问题是,有些童鞋的电脑里安装了多个php,而安装的时候没有正确的安装到预期的php的扩展目录中,就会导致无法正常工作,解决方案就是弄清楚各个php安装目录及配置关系,选择正确的目录进行安装。

其实本文还没正式开始介绍swoole,都是在学习swoole之前的准备工作,swoole的上手门槛比一般的php应用要高的多,如果没有网络开发和操作系统方面的一些知识,学习它并不是一件容易的事情,学习曲线很陡峭。

这句话我在群里说了无数次


很多新手会诟病swoole的手册写的太模糊,其实是前置知识不足,而手册也给出了需要的前置知识列表,以下引用至官网的手册-学习swoole需要哪些知识?

多进程/多线程

  • 了解Linux操作系统进程和线程的概念
  • 了解Linux进程/线程切换调度的基本知识
  • 了解进程间通信的基本知识,如管道、UnixSocket、消息队列、共享内存

socket

  • 了解SOCKET的基本操作如accept/connect、send/recv、close、listen、bind
  • 了解SOCKET的接收缓存区、发送缓存区、阻塞/非阻塞、超时等概念

IO复用

  • 了解select/poll/epoll
  • 了解基于select/epoll实现的事件循环,Reactor模型
  • 了解可读事件、可写事件

TCP/IP网络协议

  • 了解TCP/IP协议
  • 了解TCP、UDP传输协议

调试工具

  • 使用gdb调试Linux程序
  • 使用strace跟踪进程的系统调用
  • 使用tcpdump跟踪网络通信过程
  • 其他Linux系统工具,如ps、lsof、top、vmstat、netstat、sar、ss等

学习并理解一个新事务并不是一个容易的事情,特别对于swoole这种具备一定颠覆性的工具,要有耐心和实践。

淡定的把手册看完,遇到不理解的名字学会使用搜索引擎学习,swoole的手册其实是个大宝库,网络开发常见的问题其实里边都涉及到了。

来源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • 前言 上一回讲到,Swoole终于成功邂逅了PHP,现在要开始它们的奇妙路程了。 Server之初 通常,我们会把...
    零一间阅读 2,871评论 0 12
  • 转自陈明乾的博客,可能有一定更新。 转原文声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、...
    C86guli阅读 4,679评论 6 72
  • Composer Repositories Composer源 Firegento - Magento模块Comp...
    零一间阅读 3,957评论 1 66
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,810评论 0 3
  • 1、当我们还是小孩子的时候,我们最高兴的是,每天放学可以放肆的玩耍。如果当时知道以后那些小伙伴很难再相聚,会不会更...
    绛色夜未央阅读 449评论 2 0