扩展组件

4.1.2版本开始底层提供了Socket Hook机制,可将MongoDBZooKeeperPHP扩展编译为Swoole4协程版本。

实现原理

底层提供了socket_hook.hfile_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协程中才会被切换为协程模式。与同步模式可以保持兼容。