## 客户端 [mix/sync-invoke](https://github.com/mix-php/sync-invoke) 的客户端负责与 mix-syncinvoked 服务通信,将需要执行的同步代码发送至服务器,再将执行的结果返回至客户端。 ## 依赖配置 - 连接池:[beans/syncinvoke.php#L5](https://github.com/mix-php/mix-skeleton/blob/master/manifest/beans/syncinvoke.php#L5) - 拨号器:[beans/syncinvoke.php#L26](https://github.com/mix-php/mix-skeleton/blob/master/manifest/beans/syncinvoke.php#L26) - 连接:[beans/syncinvoke.php#L32](https://github.com/mix-php/mix-skeleton/blob/master/manifest/beans/syncinvoke.php#L32) - 客户端:[beans/syncinvoke.php#L45](https://github.com/mix-php/mix-skeleton/blob/master/manifest/beans/syncinvoke.php#L45) ## 调用 * 闭包内部的同步阻塞代码会在同步服务器进程中执行 * 代码异常会抛出 InvokeException,即便指定 throw new FooException() 也会转换为 InvokeException * 闭包内部代码包含的 Class 文件修改后,需重启 mix-syncd 服务器进程 ### 闭包中直接执行 * 该方式传输数据多,但修改代码无需重启 mix-syncd 服务器进程 ``` /** @var \Mix\SyncInvoke\Client $client */ $client = context()->get(\Mix\SyncInvoke\Client::class); $data = $client->invoke(function () { // 同步代码 $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "http://ip-api.com/json/?lang=zh-CN", CURLOPT_RETURNTRANSFER => true, CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { return ['error' => "cURL Error #: " . $err]; } return json_decode($response, true); }); var_dump($data); ``` ### 闭包中调用其他 class 执行 - 该方式传输数据少,但 class 内部代码修改后需要重启 mix-syncd 服务器进程 ``` /** @var \Mix\SyncInvoke\Client $client */ $client = context()->get(\Mix\SyncInvoke\Client::class); $data = $client->invoke(function () { $curl = new \App\Http\Sync\Curl(); return $curl->exec(); }); var_dump($data); ``` ### 查看实例 骨架源码中包含范例代码: [>> CurlController::class <<](https://github.com/mix-php/mix-skeleton/blob/master/app/Http/Controllers/CurlController.php)