客户端发送消息密集的话,服务端就会报SendBufferToWorker fail.May be the send buffer are Overflow.
并且已经修改了php.ini 配置 Memory_limit=1024M.
因businessworker有写Mysql操作,会导致阻塞。
请问如何增加流量控制?
// gateway 进程,这里使用Text协议,可以用telnet测试
$gateway = new Gateway("tcp://0.0.0.0:8282");
// gateway名称,status方便查看
$gateway->name = 'YourAppGateway';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';
$gateway->maxSendBufferSize=4_1024_10324;
$gateway->onBufferFull = function($connection)
{
$connection->pauseRecv();
echo "bufferFull and do not send again\n";
};
$worker->onBufferDrain = function($connection)
{
$connection->pauseRecv();
echo "buffer drain and continue send\n";
}
报这个错是因为业务处理请求速度小于客户端发送请求速度,导致消息积压在gateway到businessWorker的缓冲区,时间长了缓冲区满了就报错了。
目前没有办法检测到gateway到businessWorker缓冲区满的事件,解决办法是加快服务端业务处理速度,或者降低客户端发送请求的速度。