ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Server [TOC] `Server`和`Http\Server`将为每一个请求创建对应的协程, * 开发者可以在`onRequet`、`onReceive`、`onConnect`事件回调中使用协程客户端 * 使用协程后`onConnect`、`onReceive`、`onClose`是在不同的协程中并发执行的,需要注意进行状态检测 ### 相关配置 在`Swoole\Server`的`set`方法中增加了一个配置参数`max_coroutine`,用于配置一个`Worker`进程最多同时处理的协程数目。因为随着`Worker`进程处理的协程数目的增加,其占用的内存也会增加,为了避免超出php的`memory_limit`限制,请根据实际业务的压测结果设置该值,默认为`3000` ## 使用示例 ~~~ $http = new Swoole\Http\Server("127.0.0.1", 9501); $http->on("request", function ($request, $response) { $client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP); $client->connect("127.0.0.1", 8888, 0.5); //调用connect将触发协程切换 $client->send("hello world from swoole"); //调用recv将触发协程切换 $ret = $client->recv(); $response->header("Content-Type", "text/plain"); $response->end($ret); $client->close(); }); $http->start(); ~~~ 当代码执行到`connect()`和`recv()`函数时,会触发进行协程切换,此时`Server`可以去处理其他的事件或者接受新的请求。当此客户端`连接`成功或者后端服务`回包`后,底层会恢复协程上下文,代码逻辑继续从切换点开始恢复执行。开发者整个过程不需要关心整个切换过程。具体使用可以参考`Coroutine\Client`的文档。