Page

【Swoole】swoole中变量污染的问题

964Anson21-01-31



举个例子:有三个并发请求,启动三个协程

协程1,2,3
1: ob_start()
1 iowait  如 redis  mysql 查询 —> 等待让出执行权

2: ob_start()
2 iowait  如 redis  mysql 查询 —> 等待让出执行权

3: ob_start()
3 iowait  如 redis  mysql 查询 —> 等待让出执行权

1 io finish
1: echo 1;
1 io wait  —>让出执行权

2 io finish
2: echo 1;
2 io wait  —>让出执行权

3 io finish
3: echo 1;
3 io wait  —>让出执行权

1: $a=ob_get_contents()
2: $a=ob_get_contents()
3: $a=ob_get_contents()

1:retuen $a;
2:retuen $a;
3:retuen $a;


结果并不都是1,ob缓冲区已被污染。


swoole跟传统的fpm生命周期完全不一样,就导致fpm扩展跟swoole无法兼容,我们也不可能让全世界都开发swoole兼容的sdk,因为swoole只在中国有所发展,这就导致使用swoole的风险及成本加大。





来自anson博客 

http://www.tp0.top

2021-01-31 13:58:02