Swoole开发中2个问题解答,欢迎来Swoole问答找我!

Swoole开发中2个问题解答,欢迎来Swoole问答找我!

经常会有人通过QQ或微信向我提一些Swoole开发过程中的一些问题,只要时间允许的情况下,我一般都会做解答,下面列出在Swoole社区里的2个有意思的问题

1、Swoole协程的执行顺序?

要了解这个问题,需要先了解下Swoole的基本架构,在Swoole4.x里,我们一般都是采用多进程的模式,一般会有一个master, 一个manager, 多个worker, 大多数的业务逻辑代码都是在worker里去执行

在一个worker里,我们几乎可以随意起多个协程,如下面的代码

for ($i = 0; $i < 4; $i++) {
Swoole\Coroutine::Create(function () use ($i) {
Swoole\Coroutine::sleep(1);
echo "hello $i \n";
});
};
echo "hello main \n";

那他的执程流程如下:
1、进入for,创建一个协程

2、执行协程的回调函数

3、执行sleep,协程挂起,继续执行循环 1~3

4、循环4次完成,执行 echo ‘hello main’

5、sleep 完成,挂起的4个协程依次被唤起,执行 echo ‘hello $i’

这里面有几个核心的概念

1、代码是依次执行的

2、协程可以被挂起,(一般碰到i/o,会自动挂起)

3、协程之间唤起没有真正的循序, 先到先得

2、Swoole在重启过程中,如何保障请求不丢失

要理解这个问题,先要了解一般的重启作法

1、先stop, 后start

如果是这种,从开始stop,到最后start服务起来,必然会有时间差,如果不做任何措施,必然会丢失这个时间差里的请求,那我们一般可以怎么处理呢?

如果是单实例,这问题无解,所以我们一般要做多实例,然后顺序重启,stop前,可以在前面的proxy里先摘除掉, start成功后,再注册上。这样一般就能保障请求不丢失。现在的很多服务治理会把这个问题考虑进去了

2、reload模式

像nginx, Swoole都支持, 这种的实现机制和一般是发一个信号给master进程,master进程收到这个信号之后,先起一组新的worker接收请求,让现有的worker停止接收新请求,老请求处理完成之后,自动退出。这样就比较

留几个问题,我在Swoole问答等你!!

1、1的执行为什么结果是 0 3 2 1

2、如果把 

Swoole\Coroutine::sleep(1);

去掉,结果是啥?

3、上面说的二种重启方式有什么额外的问题?

对了,到这里,就要大大安利下Swoole社区的新动作,Swoole官方问答正式启用,Swoole团队每天都会有一个人专门来负责及时的回答问题

官方问答地址:https://wenda.swoole.com/

点击阅读原文,把你碰到的相关问题都提到Swoole问答里来吧!!共同把Swoole的社区和生态建立起来!!

最后,科普一下提问的智慧:

  • 尝试在你准备提问论坛的历史文档中搜索答案
  • 尝试搜索互联网以找到答案
  • 尝试阅读手册以找到答案
  • 尝试阅读“常见问题文档”(FAQ)以找到答案
  • 尝试自己检查或试验以找到答案
  • 尝试请教懂行的朋友以找到答案

切记抛出文档里有明确解释的问题、也切记抛出太开放性的问题,问题最好能专一、且有上下文!!

Swoole问答欢迎您!!!

———-伟大的分割线———–

PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!

饭米粒只发原创或授权发表的文章,不转载网上的文章

所发的文章,均可找到原作者进行沟通。

也希望各位多多打赏(算作稿费给文章作者),更希望大家多多投稿。

投稿请联系:

shenzhe163@gmail.com

本文由 桶哥 授权 饭米粒 发布,转载请注明本来源信息和以下的二维码(长按可识别二维码关注)

Swoole开发中2个问题解答,欢迎来Swoole问答找我!


简介:主人有点忙,还没来得及写简介~
(0)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“PHP饭米粒”,分享链接:https://www.zyxiao.com/p/18461    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部