您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman类TcpConnection的接口pauseRecv实现上传流量控制及流控恢复
发布时间:2021-12-03 23:50:13编辑:雪饮阅读()
resumeRecv
说明:
void Connection::resumeRecv(void)
使当前连接继续接收数据。此方法与Connection::pauseRecv配合使用,对于上传流量控制非常有用
参数
无参数
实例:
<?php
use Workerman\Lib\Timer;
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->onConnect = function($connection)
{
// 给connection对象动态添加一个属性,用来保存当前连接发来多少个请求
$connection->messageCount = 0;
};
$worker->onMessage = function(TcpConnection $connection, $data)
{
// 每个连接接收100个请求后就不再接收数据
$limit = 100;
if(++$connection->messageCount > $limit)
{
$connection->send("达到100个请求触发流控限制,服务暂停,消息数:".$connection->messageCount." time:".date("H:i:s",time()));
$connection->pauseRecv();
// 5秒后恢复接收数据
Timer::add(5, function($connection){
$connection->resumeRecv();
$connection->messageCount=0;
$connection->send("恢复接收!,消息数:".$connection->messageCount." time:".date("H:i:s",time()));
}, array($connection), false);
}
else{
$connection->send("服务端已收到!,消息数:".$connection->messageCount." time:".date("H:i:s",time()));
}
};
// 运行worker
Worker::runAll();
?>
服务端运行:
[root@izj6c2jeancylo0ppo4vz5z workerman]# php test.php start
Workerman[test.php] start in DEBUG mode
------------------------------------------- WORKERMAN --------------------------------------------
Workerman version:4.0.22 PHP version:7.0.33
-------------------------------------------- WORKERS ---------------------------------------------
proto user worker listen processes status
tcp root none websocket://0.0.0.0:8484 1 [OK]
--------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.
客户端脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="https://www.w3school.com.cn/jquery/jquery-1.11.1.min.js"></script>
<script type="">
$(document).ready(function(){
var ws = new WebSocket("ws://47.240.19.5:8484");
ws.onopen = function(){
ws.send("佳鹏!");
}
ws.onmessage = function(e){
console.log("接收到的数据:");
console.log(e.data);
ws.send("send 佳鹏!");
}
ws.onclose = function(e){
console.log("连接已关闭");
console.log(e);
}
ws.onerror = function(e){
}
});
</script>
</head>
<body>
</body>
</html>
客户端运行后一段时间后的效果:
暂停与恢复后的send给客户端的数据可能不连续,猜测应该是与异步有关。
关键字词:workerman,TcpConnection,pauseRecv,流量控制
相关文章
- workerman类TcpConnection的接口pauseRecv实现上传流
- workerman类TcpConnection的worker属性
- workerman类TcpConnection的id属性
- workerman类TcpConnection的protocol属性
- workerman类TcpConnection的回调属性onClose
- workerman类TcpConnection的回调属性onMessage
- workerman类TcpConnection的接口destroy
- workerman类TcpConnection的接口getRemoteIp获取远端
- workerman类TcpConnection的接口getRemotePort获取远
- workerman类TcpConnection的接口close