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

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

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

其实swoole也提供了一个框架,swoole framework是基于swoole extension设计的一个框架,要用好这个框架,还是要先了解swoole extension。

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

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

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

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

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

有时候其实只是需要转变一下思路

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

  • 安装apache、php
  • 配置apache对那个目录进行php解析
  • 用浏览器访问那个目录的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脚本:

<?php//vi hello_cli.phpecho '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的手册其实是个大宝库,网络开发常见的问题其实里边都涉及到了。

转自: 原文链接

【Swoole】当SWOOLE遇上PHP相关推荐

  1. 当SWOOLE遇上PROTOCOL

    前言 上回我们简单介绍了一下TCP Server的工作方式以及如何用Swoole实现一个简单的TCP Server,这次我们来聊聊信息流动中,非常重要基石之一--协议(PROTOCOL). 协议,通信 ...

  2. Swoole学习-Swoole入门指南

    初识Swoole Swoole官网:https://www.swoole.com/ Swoole官方文档:https://wiki.swoole.com/ 预备相关知识素材推荐 入门书籍:<tc ...

  3. 推荐系统遇上深度学习,9篇阿里推荐论文汇总!

    作者 | 石晓文 转载自小小挖掘机(ID: wAIsjwj) 业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了. 前面九篇文章中 ...

  4. 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?

    5G已经来临,科技产品向5G升级已是大势所趋,这更是检验实力的探索之路. 2月24日,华为在巴塞罗那在线发布了一系列新品,其中,华为面向全球推出的5G高端旗舰平板,同时也是全球首款公开发布的5G平板华 ...

  5. 404未找到是什么意思_为什么老遇上404 not found?你懂的

    文章转载自公众号:一只学霸(bajie203) 昨天晚上 大毛火急火燎地打开了电脑 戴上了耳机 不到两分钟 -- 我们往前一凑 登等 果然是大家最害怕的一幕出现了 学霸在网上冲浪多年 留下的都是美好的 ...

  6. 《当用户体验设计遇上敏捷》一3.5 小结

    本节书摘来自异步社区<当用户体验设计遇上敏捷>一书中的第3章,第3.5节,作者[英]Lindsay Ratcliffe , Marc McNeill,更多章节内容可以访问云栖社区" ...

  7. 当网络安全遇上大数据分析(9)

    2012年3月份,Gartner发表过一篇报告--Information Security Is Becoming a Big Data Analytics Problem .里面主要就讲到了针对大规 ...

  8. html实体编码遇上js代码

    单双引号 在js代码中 在js中单.双引号引起来的是字符串,如果我们要在字符串中使用单.双引号,需要反斜杠进行转义 let str='user\'s name'; // or let str=&quo ...

  9. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  10. 当微信小程序遇上TensorFlow:Server端实现补充

    在前面一篇文章<当微信小程序遇上TensorFlow:Server端实现>中,我们探讨了微信小程序server端的实现.今天在调试微信小程序时才发现一个问题,那就是:微信小程序要求HTTP ...

最新文章

  1. 便捷,轻巧的Groovy数据库操作
  2. hadoop生态搭建(3节点)
  3. 计算机的好处和坏处的英语作文,《电脑的好处和坏处》英语作文 80词以上 谢谢...
  4. PHP设置页面显示编码
  5. C++读取txt数据为二维数组 将数据保存到txt文本中
  6. group_concat默认长度限制
  7. Shell 变量--shell教程
  8. hao123电脑版主页_建议Lenovo用户卸载监守自盗的联想电脑管家
  9. Python3爬取豆瓣图书Top250并写入txt文件当中
  10. 同步调用、异步调用和回调函数
  11. mysql新建数据库数据类型_数据库Mysql的学习(二)-数据类型和创建
  12. linux创建文件夹操作步骤,linux如何用命令创建新建文件夹
  13. php判断是否是浏览器请求,php 判断请求是否来自“手机浏览器”
  14. RHEL 7 使用 CentOS 源安装 docker ce
  15. java 米与厘米 转换_米转码换算(米与码的换算关系)
  16. 现在卖什么赚钱?看看你适合哪种赚钱方式!
  17. 如何快速的将PDF文件转换成word?
  18. 计算机二级可以用笔记本电脑学吗,计算机二级可以自学好过吗
  19. 零基础学摄影nbsp;人像摄影调节光…
  20. 计算机文档处理是什么,电脑文档被锁了怎么办

热门文章

  1. 初识React脚手架
  2. this的HXD“super”关键字
  3. 进程池错误:TypeError: can‘t pickle SSLContext objects
  4. 英语倒装句和疑问句的区别
  5. 简单三招让你的火狐狸启动更快
  6. 毕设-基于SpringBoot家庭理财管理系统v2
  7. 【对线面试】JVM全网最强面试对答
  8. 数据库时间 用bigint_mysql数据库字段bigint使用
  9. 华为P30:一场优等“偏科生”的战争
  10. Android实现立体圆柱控件,Android 酷炫的3d立体圆柱动画效果实现_移动开发_化身孤岛的瓜...