Skip to content

Commit 5dac9b8

Browse files
authored
Merge pull request #220 from tw2066/keepAlive
Support KeepAlive to avoid duplicate connections
2 parents 78daf5a + 1274404 commit 5dac9b8

File tree

4 files changed

+30
-35
lines changed

4 files changed

+30
-35
lines changed

src/Transport/CurlerRequest.php

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class CurlerRequest
106106
/**
107107
* @param bool $id
108108
*/
109-
public function __construct($id = false)
109+
public function __construct($id = false, $handle = null)
110110
{
111111
$this->id = $id;
112112

@@ -127,23 +127,7 @@ public function __construct($id = false)
127127
CURLOPT_RETURNTRANSFER => TRUE,
128128
CURLOPT_USERAGENT => 'smi2/PHPClickHouse/client',
129129
);
130-
}
131-
132-
/**
133-
*
134-
*/
135-
public function __destruct()
136-
{
137-
$this->close();
138-
}
139-
140-
141-
public function close()
142-
{
143-
if ($this->handle) {
144-
curl_close($this->handle);
145-
}
146-
$this->handle = null;
130+
$this->handle = $handle;
147131
}
148132

149133
/**
@@ -374,10 +358,7 @@ public function isPersistent()
374358
*/
375359
public function keepAlive(int $sec = 60)
376360
{
377-
$this->options[CURLOPT_FORBID_REUSE] = TRUE;
378-
$this->headers['Connection'] = 'Keep-Alive';
379-
$this->headers['Keep-Alive'] = $sec;
380-
361+
$this->headers['Connection'] = 'keep-alive';
381362
return $this;
382363
}
383364

src/Transport/CurlerRolling.php

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,21 +239,16 @@ public function getRunningRequests()
239239

240240
/**
241241
* @param CurlerRequest $request
242-
* @param bool $auto_close
243242
* @return mixed
244243
* @throws TransportException
245244
*/
246-
public function execOne(CurlerRequest $request, $auto_close = false)
245+
public function execOne(CurlerRequest $request)
247246
{
248247
$h = $request->handle();
249248
curl_exec($h);
250249

251250
$request->setResponse($this->makeResponse($h));
252251

253-
if ($auto_close) {
254-
$request->close();
255-
}
256-
257252
return $request->response()->http_code();
258253
}
259254

src/Transport/Http.php

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ class Http
9595
* @var null|resource
9696
*/
9797
private $stdErrOut = null;
98+
99+
/**
100+
* @var null|resource
101+
*/
102+
private $handle = null;
103+
98104
/**
99105
* Http constructor.
100106
* @param string $host
@@ -116,6 +122,7 @@ public function __construct($host, $port, $username, $password, $authMethod = nu
116122
$this->_settings = new Settings();
117123

118124
$this->setCurler();
125+
$this->setHandle();
119126
}
120127

121128

@@ -235,7 +242,7 @@ private function getUrl($params = []): string
235242
*/
236243
private function newRequest($extendinfo): CurlerRequest
237244
{
238-
$new = new CurlerRequest();
245+
$new = new CurlerRequest(false, $this->handle);
239246

240247
switch ($this->_authMethod) {
241248
case self::AUTH_METHOD_QUERY_STRING:
@@ -266,7 +273,8 @@ private function newRequest($extendinfo): CurlerRequest
266273
}
267274

268275
$new->timeOut($this->settings()->getTimeOut());
269-
$new->connectTimeOut($this->_connectTimeOut);//->keepAlive(); // one sec
276+
$new->connectTimeOut($this->_connectTimeOut);
277+
$new->keepAlive();
270278
$new->verbose(boolval($this->_verbose));
271279

272280
return $new;
@@ -569,7 +577,7 @@ public function getRequestWrite(Query $query): CurlerRequest
569577
*/
570578
public function ping(): bool
571579
{
572-
$request = new CurlerRequest();
580+
$request = new CurlerRequest(false, $this->handle);
573581
$request->url($this->getUri())->verbose(false)->GET()->connectTimeOut($this->getConnectTimeOut());
574582
$this->_curler->execOne($request);
575583

@@ -748,18 +756,16 @@ private function streaming(Stream $streamRW, CurlerRequest $request): Statement
748756

749757
$request->header('Transfer-Encoding', 'chunked');
750758

751-
752759
if ($streamRW->isWrite()) {
753760
$request->setReadFunction($callable);
754761
} else {
755762
$request->setWriteFunction($callable);
756763

757-
758764
// $request->setHeaderFunction($callableHead);
759765
}
760766

761767

762-
$this->_curler->execOne($request, true);
768+
$this->_curler->execOne($request);
763769
$response = new Statement($request);
764770
if ($response->isError()) {
765771
$response->error();
@@ -802,4 +808,17 @@ public function streamWrite(Stream $streamWrite, $sql, $bindings = []): Statemen
802808
$request = $this->writeStreamData($sql);
803809
return $this->streaming($streamWrite, $request);
804810
}
811+
812+
public function __destruct()
813+
{
814+
if ($this->handle) {
815+
curl_close($this->handle);
816+
}
817+
}
818+
819+
public function setHandle()
820+
{
821+
$this->handle = curl_init();
822+
}
823+
805824
}

src/Transport/StreamInsert.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function insert($callback)
6161
//
6262
$this->request->header('Transfer-Encoding', 'chunked');
6363
$this->request->setReadFunction($callback);
64-
$this->curlerRolling->execOne($this->request, true);
64+
$this->curlerRolling->execOne($this->request);
6565
$statement = new Statement($this->request);
6666
$statement->error();
6767
return $statement;

0 commit comments

Comments
 (0)