swoole 2.* 使用注意事项一
昨晚听群友说由于不注意看swoole文档,导致挖出大坑,项目进度变得紧张。我也一直使用的是1.X版本,到目前还未使用2.X,听到网友这么说,也算给自己上了一堂课。了解情况是这样,群友使用的是swoole2.* 版本, 使用了扩展函数作为回调(1.X版本没有问题),最新协程版本(2.X)还不支持,导致问题的出现。swoole 官方也在文档标出,使用协程Server编程须知https://wiki.s
昨晚听群友说由于不注意看swoole文档,导致挖出大坑,项目进度变得紧张。我也一直使用的是1.X版本,到目前还未使用2.X,听到网友这么说,也算给自己上了一堂课。
了解情况是这样,群友使用的是swoole2.* 版本, 使用了扩展函数作为回调(1.X版本没有问题),最新协程版本(2.X)还不支持,导致问题的出现。
swoole 官方也在文档标出,使用协程Server编程须知
https://wiki.swoole.com/wiki/page/853.html
禁止使用协程 API 的场景
在ZendVM中魔术方法、反射函数、call_user_func、call_user_func_array是由C函数实现的,并未opcode,这些操作可能会与Swoole底层的协程调度发生冲突。因此严禁在这些地方使用协程的API。请使用PHP提供的动态函数调用语法来实现相同的功能。
禁止使用协程的场景
__get__set__call__callStatic__toString__invoke__destructcall_user_funccall_user_func_arrayReflectionFunction::invokeReflectionFunction::invokeArgsReflectionMethod::invokeReflectionMethod::invokeArgsarray_walk/array_map
字符串函数
错误的代码
$func = "test";
$retval = call_user_func($func, "hello");
正确的代码
$func = "test";
$retval = $func("hello");
对象方法
错误的代码
$retval = call_user_func(array($obj, "test"), "hello");
正确的代码
$method = "test";
$retval = $obj->$method("hello");
目前swoole 描述的坑分享比较少,所以我就把网友这个坑拿出来分享, 由于swoole2.X 出来不久,所以使用前还是建议多看文档和官方的注意事项。
「智能机器人开发者大赛」官方平台,致力于为开发者和参赛选手提供赛事技术指导、行业标准解读及团队实战案例解析;聚焦智能机器人开发全栈技术闭环,助力开发者攻克技术瓶颈,促进软硬件集成、场景应用及商业化落地的深度研讨。 加入智能机器人开发者社区iRobot Developer,与全球极客并肩突破技术边界,定义机器人开发的未来范式!
更多推荐
所有评论(0)