官方的demo:
use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->onConnect = function(TcpConnection $connection)
{
// 給connection對象動態(tài)添加一個屬性,用來保存當(dāng)前連接發(fā)來多少個請求
$connection->messageCount = 0;
};
$worker->onMessage = function(TcpConnection $connection, $data)
{
// 每個連接接收100個請求后就不再接收數(shù)據(jù)
$limit = 100;
if(++$connection->messageCount > $limit)
{
$connection->pauseRecv();
// 30秒后恢復(fù)接收數(shù)據(jù)
Timer::add(30, function($connection){
$connection->resumeRecv();
}, array($connection), false);
}
};
// 運行worker
Worker::runAll();
經(jīng)測發(fā)現(xiàn)接受數(shù)據(jù)100次以后是每間隔30s接收一次數(shù)據(jù) 問題是出在timer上嗎
timer定時器放在onmessages()里是每次接受到數(shù)據(jù)都啟動一個定時器吧 這樣是不是有問題?