thinkphp5.1 使用workerman/gatewayclient組件,發(fā)送消息緩慢,系統(tǒng)出現(xiàn)大量close_wait進(jìn)程
已經(jīng)參考優(yōu)化文檔,使用了event組件
CLOSE_WAIT是TCP正常的狀態(tài),一般不用擔(dān)心。
如果不想有CLOSE_WAIT,發(fā)送數(shù)據(jù)的時(shí)候復(fù)用連接發(fā)送,不要發(fā)送一條就創(chuàng)建一個(gè)連接。
另外你這個(gè)也不是GatewayWorker,也沒(méi)看到哪里要用到gatewayClient,也沒(méi)看見(jiàn)代碼用到。
public function test()
{
$data_sock = [
'data' => [
'params' => [
'uid' => 1009,
],
],
'req_id' => 1,
];
return $this->send_request($data_sock);
}
public function send_request(array $data_sock = [])
{
try {
$fp = stream_socket_client('tcp://0.0.0.0:2346', $errno, $errmsg, 3);
if ($fp) {
// 發(fā)送數(shù)據(jù),Text協(xié)議需要在數(shù)據(jù)末尾加上換行符
fwrite($fp, json_encode($data_sock) . "\n");
// 讀取推送結(jié)果
$result = fread($fp, 8192);
if ('ok' == trim($result)) {
return true;
}
}
return false;
} catch (\Exception $exception) {
return false;
} finally {
fclose($fp);
}
}
改成
$fp = stream_socket_client('tcp://127.0.0.1:2346', $errno, $errmsg, 3, STREAM_CLIENT_PERSISTENT);
這樣讓程序復(fù)用連接