使用easySwoole框架的时候遇到的问题和解决

  • Post author:
  • Post category:其他


1.程序和进程的全局变量需要区分,在 Worker 进程内对这些对象或变量进行写操作时,会自动从程序内存中分离,变为进程的全局对象或变量,可能会在接口方法中修改全局变量的值的时候只会在当前会话中生效。

2.使用ORM操作数据库时,使用AbstractModel的get或者all方法得到的数据会是一个model对象,可以在get或者all后通过toArray方法变成数组。可以通过对MySQL的配置中的returnCollection字段进行控制返回查询结果类型。

3.框架没有超全局变量,$_SESSION,$_POST,$_GET,$_REQUEST,主要是防止进程对全局变量操作造成数据污染。

4.swoole:4.8.6  easySwoole:3.5.1版本的Controller类命名需要严格保证首字母大写,否则会导致路由不到该控制器,即404错误。

5.当程序运行的时候,打印:\[FATAL ERROR\]: all coroutines (count: 1) are asleep – deadlock! 导致easySwoole进程终止:在bootstrap中添加一行配置\Swoole\Coroutine::set([‘enable_deadlock_check’ => false]); 即可



6.使用redis的连接池getObj获取连接之后需要执行recycleObj方法,否则很快就会在使用redis的时候出现error报错:[Call to a member function get() on null…],导致接口返回500错误



7.$request接收contentType为application/json的参数的时候需要使用getBody方法才能获取到前端传的json字符串,再通过json_decode才能获取到前端所传的字段的值。

# getBody获取 注意方法getParseBody()是获取不到json字符串中的字段的
$raw = $this->request()->getBody()->__toString();
$request = json_decode($raw, true);

# rawcontent获取
$raw = $this->request()->getSwooleRequest()->rawcontent();
$this->request = json_decode($raw, true);



版权声明:本文为qq_45067424原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。