workerman作为客户端发送数据给服务端引起mysql报错

北晨

workerman作为客户端发送数据给服务端引起mysql报错,报错显示mysql   Too   many   connections
修改了mysql配置文件的max_connections,设置为1000,测试发现代码运行一段时间之后还是报原来的错误。删掉向服务端发送消息的代码又正常运行,求大佬解惑
代码如下

<?php
 
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
 
require 'Autoloader.php';
require_once __DIR__ . '/vendor/autoload.php';
 
// 创建一个Worker监听8992端口,不使用任何应用层协议
$tcp_worker = new Worker("tcp://0.0.0.0:8992");
 
// 启动10个进程对外提供服务
$tcp_worker -> count = 8;
$tcp_worker -> onWorkerStart = function ($tcp_worker) {
    //将db实例存储在全局变量中(也可以存储在某类的静态成员中)
    global $db;
    $db = new \Workerman\MySQL\Connection('127.0.0.1', '3306', 'root', 'root', 'test');
    global $tcp_connection;
    //以tcp协议连接远程tcp服务器
    $tcp_connection = new AsyncTcpConnection("tcp://127.0.0.1:8000");
};
// 当客户端发来数据时
$tcp_worker -> onMessage = function ($connection, $data) {
    global $tcp_connection;
    //异步连接其他服务端
    $tcp_connection -> connect();
    //向服务端发送$data
    $tcp_connection -> send($data);
};
// 运行worker
Worker ::runAll();
2503 1 1
1个回答

blogdaren

1、报告mysql   Too   many   connections,说明mysql服务器连接数已经达到负载上线,并且有大量的mysql连接未正常释放;
2、单看你这段代码,也没发现能产生那么大的mysql连接,8个进程初始化了8个mysql链接而已;  
3、另外发送数据到8000端口,是不是你8000端口所在的服务存在“非正常”操作mysq呢?

  • 暂无评论
年代过于久远,无法发表回答
🔝