• Server
    • 相关配置
  • 使用示例

    Server

    ServerHttp\Server将为每一个请求创建对应的协程,

    • 开发者可以在onRequetonReceiveonConnect 事件回调中使用协程客户端
    • 使用协程后onConnectonReceiveonClose是在不同的协程中并发执行的,需要注意进行状态检测

    相关配置

    Swoole\Serverset方法中增加了一个配置参数max_coroutine,用于配置一个Worker进程最多同时处理的协程数目。因为随着Worker进程处理的协程数目的增加,其占用的内存也会增加,为了避免超出php的memory_limit限制,请根据实际业务的压测结果设置该值,默认为3000

    使用示例

    1. $http = new Swoole\Http\Server("127.0.0.1", 9501);
    2. $http->on("request", function ($request, $response) {
    3. $client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
    4. $client->connect("127.0.0.1", 8888, 0.5);
    5. //调用connect将触发协程切换
    6. $client->send("hello world from swoole");
    7. //调用recv将触发协程切换
    8. $ret = $client->recv();
    9. $response->header("Content-Type", "text/plain");
    10. $response->end($ret);
    11. $client->close();
    12. });
    13. $http->start();

    当代码执行到connect()recv()函数时,会触发进行协程切换,此时Server可以去处理其他的事件或者接受新的请求。当此客户端连接成功或者后端服务回包后,底层会恢复协程上下文,代码逻辑继续从切换点开始恢复执行。开发者整个过程不需要关心整个切换过程。具体使用可以参考Coroutine\Client的文档。