• 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的扩展包里,写代码就能识别了。而且是最新的代码特性。

  • 相关阅读:
    使用用Ghost制作的win2k3和winxp文件具有相同的SID的解决办法
    64 bits Windows 7 使用 regsvr32 的註冊方式(转)
    怎么实现用户匿名访问web,但数据库要用Windows集成验证方式(数据库和web服务器分别在两台机器上)
    为什么按照微软给定的匿名配置Web 同步最终造成创建订阅的步骤总是失败?但改为需要身份验证就行了
    How to edit Team Build Types
    利用WhiteHose一步步建立分布式系统的框架(二)创建LDD步骤
    发现:InfoPath 2007 Training Labs地址
    在MSF中怎么区分易混淆的工作项类型:Bug、风险和问题(我个人的理解)
    RGB Colour Map
    How to distinguish Design time or Running time in Mobile cusotmer Contorl(the NetCF2.0 is different to NetCF1.0)
  • 原文地址:https://www.cnblogs.com/gongchixin/p/7345637.html
Copyright © 2020-2023  润新知