thinkphp5.1 使用workerman/gatewayclient组件,发送消息缓慢,系统出现大量close_wait进程
已经参考优化文档,使用了event组件
CLOSE_WAIT是TCP正常的状态,一般不用担心。 如果不想有CLOSE_WAIT,发送数据的时候复用连接发送,不要发送一条就创建一个连接。
另外你这个也不是GatewayWorker,也没看到哪里要用到gatewayClient,也没看见代码用到。
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) { // 发送数据,Text协议需要在数据末尾加上换行符 fwrite($fp, json_encode($data_sock) . "\n"); // 读取推送结果 $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);
这样让程序复用连接
ok 我试试
CLOSE_WAIT是TCP正常的状态,一般不用担心。
如果不想有CLOSE_WAIT,发送数据的时候复用连接发送,不要发送一条就创建一个连接。
另外你这个也不是GatewayWorker,也没看到哪里要用到gatewayClient,也没看见代码用到。
public function test()
{
$data_sock = [
'data' => [
'params' => [
'uid' => 1009,
],
],
'req_id' => 1,
];
return $this->send_request($data_sock);
}
现在的现象就是发送很慢,需要重启服务
改成
这样让程序复用连接
ok 我试试