并发调用
Client并发请求
---------
在协程版本的`Client`中,实现了多个客户端并发发包功能(`setDefer`机制)。
通常,如果一个业务请求中需要做一次redis请求和一次mysql请求,那么网络IO会是这样子:
`redis发包->redis收包->mysql发包->mysql收包`
以上流程网络IO的时间就等于 redis网络IO时间 + mysql网络IO时间。
而对于协程版本的Client,网络IO可以是这样子:
`redis发包->mysql发包->redis收包->mysql收包`
以上流程网络IO的时间就接近于 MAX(redis网络IO时间, mysql网络IO时间)。
现在支持并发请求的Client有:
* Swoole\Coroutine\Client
* Swoole\Coroutine\Redis
* Swoole\Coroutine\MySQL
* Swoole\Coroutine\Http\Client
除了`Swoole\Coroutine\Client`,其他`Client`都实现了`defer`特性,用于声明延迟收包。
因为`Swoole\Coroutine\Client`的发包和收包方法是分开的,所以就不需要实现`defer`特性了,而其他Client的发包和收包都是在一个方法中,所以需要一个`setDefer()`方法声明延迟收包,然后通过`recv()`方法收包。