Server [编辑本页]

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

请勿在使用swoole_server之前调用其他异步IO的API,否则将无法创建swoole_server可以在Server启动后,onWorkerStart回调函数中使用。

swoole_server只能用于php-cli环境,否则会抛出致命错误

构建Server对象

$serv = new swoole_server("127.0.0.1", 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进程/线程结构图


  • 安达英司

    流程图画得霸气……

  • BirdZhang

    流程图画得霸气……

  • i董楠

    流程图画得霸气……

  • wangql

    不重启的话,可以增加或者删除worker吗

  • 某人

    流程图画得霸气……

  • mot

    流程图画得霸气……

  • mot

    流程图画得霸气……

  • yuankess

    问题出来了,这玩意到底怎么用?

  • zjshop

    给给带项目实例的例子呗 比如文件上传

  • ChenQingJi

    php推送应该就是个不错的例子

  • 庞鹤峰

    流程图画得霸气……

  • 阿拉斯加的野猪zZ

    流程图画得霸气……

  • 桄欣

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

  • FAITH

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

  • etc

    碎了。。。 。。乍一看文档还不知道怎么用。

  • qqwkqq

    运行流程图 挂了 谁来看看

  • 蛙饭

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

  • 粟浩翔

    流程图画得霸气……就是看不懂,谁能解释一下

  • 汪孝明

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

  • NewbMiao

    流程图真的霸气!

  • chris_guojn

    霸气

  • 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 启动后 如何关闭

  • Royee

    kill [嘻嘻]

  • 詹潮江

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

  • yangxiangming-

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

  • ilike

    流程图画得霸气……

  • 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的时候需要设置最大脚本运行时间以及内存大小吗?

  • aaa

  • [28|24|猫耳摇摆|1]

    我特么真的是醉了