× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Swoole

Swoole扩展是按照PHP标准扩展构建的。使用phpize来生成编译检测脚本,./configure来做编译配置检测,make进行编译,make install进行安装。

  • 请下载releases版本的swoole,直接从github主干上拉取最新代码可能会编译不过
  • 如果当前用户不是root,可能没有PHP安装目录的写权限,安装时需要sudo或者su
  • 如果是在git分支上直接git pull更新代码,重新编译前务必要执行make clean

安装准备

安装swoole前必须保证系统已经安装了下列软件

php-5.3.10 或更高版本
gcc-4.4 或更高版本
make
autoconf
pcre (centos系统可以执行命令:yum install pcre-devel)

下载地址

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

cd swoole
sudo phpize (ubuntu 没有安装phpize可执行命令:sudo apt-get install php-dev来安装phpize)
sudo ./configure
sudo make 
sudo make install

完整编译示例

以下脚本会下载并编译master分支的swoole源码

mkdir -p ~/build && \
cd ~/build && \
rm -rf ./swoole-src && \
curl -o ./tmp/swoole.tar.gz https://github.com/swoole/swoole-src/archive/master.tar.gz -L && \
tar zxvf ./tmp/swoole.tar.gz && \
mv swoole-src* swoole-src && \
cd swoole-src && \
phpize && \
./configure \
--enable-coroutine \
--enable-openssl  \
--enable-http2  \
--enable-async-redis \
--enable-sockets \
--enable-mysqlnd && \
make clean && make && sudo make install

PECL

swoole项目已收录到PHP官方扩展库,除了手工下载编译外,还可以通过PHP官方提供的pecl命令,一键下载安装swoole

pecl install swoole

配置php.ini

编译安装成功后,修改php.ini加入

extension=swoole.so

通过php -mphpinfo()来查看是否成功加载了swoole,如果没有可能是php.ini的路径不对,可以使用php --ini来定位到php.ini的绝对路径。


  • 放羊~

    作者精神挺好很伟大! 捐款是好习惯

  • 徐明松

    顶一下,要好好学习了

  • jack

    swoole可以替代Php-fpm吗?

  • MOMO记事本

    支持一下哈

  • 'l'eo

    在听你的演讲

  • dym

    很强大,作者精神值得大力支持

  • 管思旭同学

    看了作者的演讲过来的,可是我的修行还不够,还不知道该怎么使用

  • 瑞

    很牛的样子,支持。

  • 我叫贱人三

    php 版的nodejs?

  • 冯煜博

    可以,只要你想 swoole 甚至可以代替 nginx。

  • 炽Yellow

    正在学习

  • Hoheart

    首先统一一下swoole怎么发音吧?我觉得swu:l比较好听。

  • 崔凯

    正在研究,已完成websocket聊天室,棒棒哒

  • e-ink kindle

    文档的电子书能支持下amazon kindle的mobi格式木? pdf的也行

  • 奇虎分享网

    过来看看你的博客,希望每天都更新一些文章。

  • fd 不能限制为整型,多台服务器使用同一个redis集群时,因为 fd 的限制,造成系统逻辑频空增加不少复杂度。建议系统内置的主键和外部项目使用的主键分开,系统自动做一下映射,这样会减少集群部署时的不少麻烦。

  • 雪夜裸奔

    购买swoole.com上面链接的付费视频,算是支持吗

  • 初学者想学一下swoole,希望有人给予解答: 是不是一个类似网络棋牌游戏大厅这种网页游戏,服务端就可以用swoole_websocket_server? 客户端是用http_client还是直接js的websocket? 有没有大神给解释下swoole各服务器和客户端到底怎么用?以游戏大厅为例说一下整体系统架构。

  • 星空下的草地

    好东西,值得拥有!学习程序最快的方式,php+swoole

  • 讲真,站在php角度来讲,这个框架很优秀,也很新颖,因为绝大多数的php开发者都已经习惯了同步编程,突然遇上异步的确实很新的感觉。但是站在其他语言来说。这个框架其实并不怎么好。其他大部分语言已经原生支持异步的了。

  • 匆匆

    很强大,值得学习。

  • 冰是睡着得水

    怎么获取IP地址

  • homercharles

    支持韩老板,韩老板威武!~

  • black

    新手入门教程pdf里,很多章节都缺失了,能补一下不

  • D
    D

    图书馆已安装:

    /root/swoole-1.9.6 /模块

    如果您碰巧想要链接到已安装的库。

    在给定的目录下,LIBDIR必须使用libtool,并且。

    指定库的完整路径名,或使用' -LLIBDIR'

    在连接过程中标记,并至少执行下列操作之一:

    -将LIBDIR添加到“LD_LIBRARY_PATH”环境变量。

    在执行期间

    -将LIBDIR添加到“LD_RUN_PATH”环境变量。

    在连接

    -使用' - wl,- rpath - wl,LIBDIR' linker标志。

    -让系统管理员将LIBDIR添加到' /etc/ lsd .conf'

    有关共享库的任何操作系统文档。

    更多信息,如ld(1)和ld.so(8)手册页。

  • D
    D

    哪位大神指点一下,这是什么原因啦

  • 木偶

    不错,助力 php 高歌向前

  • henry

    想入手,但就对一些内存不能自动释放比较谨慎,像类静态变量,如果引用的别人的库,这个库的类中使用了static变量,总不能自己去给它释放吧?

  • 室外桃源

    不错我继续阅读文档

  • kimistar

    韩老大越来越厉害了。

  • javacao

    真是厉害啊,打开phper新世界的大门,丰富了php生态!

  • 622

    .......厉害

  • shangshan

    支持

  • 流年易逝,不易拾

    支持

  • charles

    支持

  • zhiqiang_he

    支持

  • UFO

    支持!!!

  • Along

    支持

  • 水中漂瓶

    试了一下,还是和php有很大的不一样的,作者的能力和精神可歌可泣,转golang了,毕竟新语言历史负担小,并且也不难,php还是让专心做web服务器吧,虽然web现在下坡路

  • 书写空白

    感觉社区不怎么活跃啊,其实一般都会用php来做web服务的,专注也是无可替代的

  • 在路上

    要是能完美支持Windows,会不会就解决了php只能做web服务的局限性

  • 15538504229

    加广告是好事,不加广告难道要吃西北风吗。本来就是免费开源的

  • 18123926365

    众多phper可以需求到了可以用swoole顶一下,但是从历史发展的角度看,遇到异步尽早转go

  • 18300003780

    支持韩老师

  • cslistener

    swoole的发音可以参考单词swoop,音译可以为“思悟”或者“思悟乐”。

  • 13918199885

    我们都叫他丝袜。。。

  • 15833627275

    不知道为什么,我安装了swoole 异步扩展,链接mysql的时候,一直都是提示这个错误:Segmentation fault,我换了几个版本也不行

  • 18600882231

    看了swoole 辞职了 公司还在搞tp 找一家swoole公司去

  • 15867209881

    异步协程还是交给golang吧

  • 红客

    如果需要加入信号处理,可以这样使用

  • 红客

    如果需要加入信号处理,可以这样使用

    ~~~

  • 红客

    use Swoole\Process;
    use Swoole\Server;
    
    $server = new Server('127.0.0.1', 9501);
    
    $process = new Process(function ($process) use ($server) {
        while (true) {
            $msg = $process->read();
            foreach ($server->connections as $conn) {
                $server->send($conn, $msg);
            }
        }
    });
    
    Process::signal(SIGTERM,[$server, "shutdown"]);
    $server->addProcess($process);
    $server->on('receive', function ($serv, $fd, $reactor_id, $data) use ($process) {
        $process->write($data);
    });
    
    $server->start();