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

Server

创建一个异步服务器程序,支持TCPUDPUnixSocket 3种协议,支持IPv4IPv6,支持SSL/TLS单向双向证书的隧道加密。使用者无需关注底层实现细节,仅需要设置网络事件的回调函数即可。

请勿在使用Server创建之前调用其他异步IOAPI,否则将会创建失败。可以在Server启动后onWorkerStart回调函数中使用。

Server只能用于php-cli环境,在其他环境下会抛出致命错误

构建Server对象

$serv = new Swoole\Server('0.0.0.0', 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);

设置运行时参数

$serv->set(array(
    'worker_num' => 4,
    'daemonize' => true,
    'backlog' => 128,
));

注册事件回调函数

$serv->on('Connect', 'my_onConnect');
$serv->on('Receive', 'my_onReceive');
$serv->on('Close', 'my_onClose');

PHP中可以使用4种回调函数的风格

启动服务器

$serv->start();

属性列表

$serv->manager_pid;  //管理进程的PID,通过向管理进程发送SIGUSR1信号可实现柔性重启
$serv->master_pid;  //主进程的PID,通过向主进程发送SIGTERM信号可安全关闭服务器
$serv->connections; //当前服务器的客户端连接,可使用foreach遍历所有连接

运行流程图

Swoole扩展架构图

进程/线程结构图

Swoole进程/线程结构图 进程/线程结构图2


  • 桄欣

    很多人求范例,在Github上下载源码里有个examples目录,里面有各种范例程序

  • FAITH

    怎么集成到yii?我试了一次yiic命令行 来启动 swoole扩展,监听9501,但是netstat 找不到这个端口,这怎么解决?

  • 蛙饭

    swoole set里面设置进程守护 (daemonize为true) 后不执行io相关操作 .举例: 设置receive事件的时候 文件读写做log . 是不是因为php版本问题5.3.28 .补充(ps -ef | grep php 中是启动了的)

  • 汪孝明

    server与server之间如何通讯呢?我在task和worker进程里建立swoole_client连接服务器,进程就挂了

  • object8421

    如果用swoole作为udp服务器,可以利用其多进程来处理高并发吗, 设置worker_num就够了吗?@Rango-韩天峰

  • c
    c

    支持 https 服务器吗?

  • balalala

    我觉得swoole可以做数据层,业务层通过udp发包,swoole设置worker_num用抢占模式接包处理后,再回包给业务层,毕竟是C的扩展,而且是跑在cli模式,省去了服务器解析,从而提高效率吧。。个人理解

  • object8421

    https://github.com/LinkedDestiny/swoole-doc,这个链接有好多分析文档啊,大家可以参考下

  • 咚咚锵

    'daemonize' => true 启动后 如何关闭

  • 詹潮江

    现在的版本还有Reactore线程吗?[思考] 这个流程图是不是太旧了?

  • yangxiangming-

    看Github上面的例子文件、代码好混乱,有没有比较简洁版的dome

  • donald

    发现BUG,onStart里面写文件 file_put_contents('master_pid.txt', $serv->master_pid); 'daemonize' => true, // 转入后台守护进程运行后,位置不一样了 1 daemonize' => true 在 /root 下 2 daemonize' => false 在 / 下

  • Jakwin

    什么时候才能在windows上方便使用?希望官方出个dll,放在windows的php目录下加个配置就可以使用就好了!!!!

  • 柏拉图式劈腿

    这货是用来取代nginx和apache的么?

  • vkchow

    还是linux吧,你自己静下心来自学也就是1、2周的时间。而且eclipse for php也有linux版本,mac os版本,你如果不愿意用linxu,macos也挺好的。。。。顺便又买台苹果电脑。

  • 搜索

    同样的问题,解决了嘛

  • 蛙饭

    并没有 ,估计是php版本问题

  • swoole

    PHP Fatal error: Class 'swoole_server' not found in /var/www/html/swoole.php on line 3 执行脚本报错了,哪位大神给解决下,swoole扩展确定安装成功了,phpinfo里能看到

  • swoole

    找到问题了,php-cli模式配置文件没有修改,修改的是php-fpm的。。。

  • backer

    流程图画得霸气……

  • Roderick

    为什么我的编译安装好后,加载报错直接是500,swoole_server 加载不了?

  • 东子

    流程图画得霸气……

  • 爱大奖非师范类

    流程图画得霸气……

  • test

    流程图画得霸气……

  • daydaygo

    服务器编程, 还是跑在linux虚拟机里面吧, 毕竟大部分线上环境都是linux, 还可以帮助自己熟悉一下linux

  • 韶飞轶事

    server 进程不会随着client进程减少而吗? 我测试了 client进程全部关闭, 但是server进程数不变

  • Larry

    流程图画得霸气……

  • _Calix

    流程图画得霸气……

  • 樱木花涛

    流程图看不到

  • 杨书海

    流程图画的不错

  • CarloQ

    好像还不可以以 cgi 模式运行,然后 nginx 用 fastcgi_pass 来作为前端

  • CarloQ

    好吧,看了下是可以的,只不过,只能自己实现

  • 轻舞凋零

    看完流程图,一目了然哦

  • 心灵的架构师

    流程图霸气啊 看的我 稀里糊涂的

  • xhc

    swProcessPool_wait: [Manager]unknow worker[pid=-1]?

  • xhc

    1.9.6下,SWOOLE_BASE, macOS系统

  • 洪洋

    TCP分server client端, 个人理解Server端应该只用监听接口,为什么还要有IP这个参数,client端才需要去设置IP或者DNS,这点有点难理解。

  • 洪洋

    端口 不是接口 打错了

  • 悠悠知我心

    websocket server $serv->connections这个对象是空的,并且确定有pcre pcre-devel,而且在编译安装swoole前有安装的,没这个nginx的rewrite用不了的

  • 悠悠知我心

    不太可能,swoole是基于epoll的,实现不了

  • 运行server的时候需要设置最大脚本运行时间以及内存大小吗?

  • codinghuang

    正在学习,有难度!!

  • 拼个Léon

    怎么标记一个连接为已登录:目的是已登录的用户在一个worker中处理其消息,未登录的在另外一个线程处理。

    是不是必须借助 swoole_table 等来实现?

    如果有setUserInfo(key, value)那就容易了

  • 15300269693

    请问,,swoole能定义每个request的最大处理时间吗?我在配置里也没有找到相应的配置,那如果有个死循环,这时,是不是这个worker就废了,要一直到重启server呢?

  • 15806994700

    server 端没有enablessl 方法?pop3 starttls 命令 服务端如何支持

  • 13501216920

    Fatal error: Swoole\Server::__construct(): swoole_server only can be used in PHP CLI mode这是怎么回事呢?哪位大神帮忙解答一下呗,能提供基础使用流程吗?

  • 沈唁

    命令行模式运行。

  • 15011146658

    有了swoole 。其他语言做的到的。PHP都可以做到。而且更好

  • 13160097516

    Fatal error: Swoole\Server::__construct(): swoole_server only can be used in PHP CLI mode. in /Users/zhouqiang/file/php/php-swoole/server.php on line 8 一直报这个错,有大神知道是啥情况嘛?初学遇坑

  • 15513082138

    @大爷的杂货铺Server只能在命令行运行

  • 13147010548

    作者能不能画一个 http://doc2.workerman.net/principle.html 这个图 workerman 手册里的图特别好懂