- 扩展组件
- 实现原理
- 兼容性
扩展组件
从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协程中才会被切换为协程模式。与同步模式可以保持兼容。
