扩展组件
从4.1.2
版本开始底层提供了Socket Hook
机制,可将MongoDB
、ZooKeeper
等PHP
扩展编译为Swoole4
协程版本。
实现原理
底层提供了socket_hook.h
和file_hook.h
,在扩展源代码中找到#include <sys/socket.h>
的代码,下面插入#include "ext/swoole/include/socket_hook.h"
即可。底层会自动替换socket
相关的系统调用,转化为协程的C
函数。
如recv()
系统调用将被转换为swoole_coroutine_recv
,这个C
函数实现是在swoole.so
中。因此使用socket_hook
的扩展,需要依赖swoole
扩展,必须在extension=swoole.so
之后加入。
不仅是PHP
扩展,其他的C/C++
代码也可以使用这种方式实现协程化。
兼容性
使用socket_hook
协程化后的扩展,在非协程中依然是同步阻塞的。只有在Swoole4
协程中才会被切换为协程模式。与同步模式可以保持兼容。