【已解决】webman中使用swoole,控制器中Request类已经做了协程上下文处理吗

xiaopi

问题描述

我找到了答案,在协程中使用全局变量确实是会互相干扰,只是我下面的代码是开多个进程处理的,恰好两次请求是两个进程,所以是两份全局变量。改成只开1个进程,就会发现协程污染的问题了

  • 目前在已有的webman项目中想使用swoole的协程,所以Event-loop切换成了swoole。
    在控制器中的协程环境中,使用全局静态变量,按理说两次请求(两个协程)操作全局变量应该会污染的啊,但是实际上并没有发现污染,是webman已经做了上下文处理了么?

  • 如下图
    截图

    按照代码逻辑来看,
    第一次请求参数a=1时,当前请求的协程A会先修改全局变量为aaa,然后协程挂起5秒;
    第二次请求参数a=2时,当前请求的协程B会直接修改全局变量为bbb,然后返回给客户端
  • 问题:

    如果在五秒内依次请求上述两个请求,请求1在5秒协程恢复后,应该已经被请求2污染了啊,输出的全局变量bbb的值啊,为什么我测试的结果依旧是正确的,即请求1输出aaa,请求2输出bbb

环境

截图

测试结果

截图
截图

317 0 0
0个回答

🔝