/** * 关闭服务 */ public function close() { if ($this->__client) { @$this->__client->close(); $this->__client = null; } }
protected function request($request) { $runDir = $this->service->getRunDir(); $port = (include $runDir . 'service-port.php'); $sockFile = $runDir . 'service-' . $port . '.sock'; $client = new Client(SWOOLE_UNIX_STREAM); $client->set(['open_length_check' => true, 'package_length_type' => 'N', 'package_length_offset' => 0, 'package_body_offset' => 4]); if (!@$client->connect($sockFile, 0, 20)) { return false; } $request = serialize($request); $client->send(pack('N', $length = strlen($request))); if ($length > 2097152) { foreach (str_split($request, 1048576) as $chunk) { $client->send($chunk); } } else { $client->send($request); } $response = $client->recv(); $client->close(); if ($response === false) { return false; } $length = unpack('N', $response)[1]; return unserialize(substr($response, -$length)); }