本文作者:陈进坚
个人博客:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
简书:https://www.jianshu.com/u/8ba9ac5706b6
联系方式:jian1098@qq.com
环境依赖
- 仅支持Linux,FreeBSD,MacOS,3类操作系统
- Linux内核版本2.3.32以上
- PHP5.3.10以上版本,包括PHP7
- gcc4.4以上版本或者clang
- cmake2.4+,编译为libswoole.so作为C/C++库时需要使用cmake
下载
- https://github.com/swoole/swoole-src/releases
- http://pecl.php.net/package/swoole
- http://git.oschina.net/matyhtf/swoole
安装
方法一:pecl install swoole
方法二:依次执行下面的命令
1 | cd swoole |
安装成功后需要添加php扩展,修改php.ini加入
1 | extension=swoole.so |
通过phpinfo()查看到的信息
安装报错解决
make或make install无法执行或编译错误
1
2
3
4
5NOTICE: PHP message: PHP Warning: PHP Startup: swoole: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20121212
These options need to match
in Unknown on line 0原因:php版本和编译时使用的phpize和php-config不对应,需要使用绝对路径来进行编译。使用绝对路径执行PHP。
1
2
3local/php-5.4.17/bin/phpize
./configure --with-php-config=/usr/local/php-5.4.17/bin/php-config
/usr/local/php-5.4.17/bin/php server.php缺少pcre.h头文件
1
fatal error: pcre.h: No such file or directory
原因:缺少pcre,需要安装libpcre
Cannot find autoconf
原因:没有安装autoconf
创建服务端实例
示例:
1 | // Server |
创建一个swoole_server基本分三步:
创建swoole_server对象
设置swoole_server的相关配置
调用on函数设置相关回调函数
onStart回调在server运行前被调用,onConnect在有新客户端连接过来时被调用,onReceive函数在有数据发送到server时被调用,onClose在有客户端断开连接时被调用
配置选项请参考:https://www.w3cschool.cn/swoole/swoole-setting.html
创建客户端实例
1 |
|
异步任务
1 | /** |
编程注意事项
- 不要在代码中执行sleep以及其他睡眠函数,这样会导致整个进程阻塞
- exit/die是危险的,会导致worker进程退出
- 可通过register_shutdown_function来捕获致命错误,在进程异常退出时做一些请求工作
- PHP代码中如果有异常抛出,必须在回调函数中进行try/catch捕获异常,否则会导致工作进程退出
- Worker进程不得共用同一个Redis或MySQL等网络服务客户端,Redis/MySQL创建连接的相关代码可以放到onWorkerStart回调函数中。