`

node状态计数

 
阅读更多

服务器维持状态集合,如果20秒内某个key的数值未达到20,则判定超时,如果达到20,则输出结果

服务器端代码(node server.js)

var http = require("http"),
    url  = require("url"),
    path = require("path"),
    qs   = require("qs"),
    fs   = require("fs");

var handle = {}
handle["/"]            = rootHandler;
handle["/add"]         = addHandler;

var g_table = {}

http.createServer(function (req, res) {
    var pathname=url.parse(req.url).pathname;
    if(typeof handle[pathname] === "function"){
    	handle[pathname](res, req);
    }
    else {
    	res.writeHead(404);
	res.write("<h1>404 Not Found</h1>");
	res.end();
    }
}).listen(8080, "0.0.0.0");

console.log("Server running at http://0.0.0.0:8080/");

//load Data
fs.readFile('status.save', function (err, data) {
    if (err) g_table = {};
    g_table = JSON.parse(data);
});


var i = 0
setInterval(function(){
    var now = Date.parse(new Date())
    for (var key in g_table){
    	if(g_table[key].ts < now - 20000){
	    console.log(key + " timeout");
	    delete g_table[key];
	}
    }
},1000);
setInterval(function(){
    fs.writeFile('status.save', JSON.stringify(g_table) , function (err) {
        if (err) throw err;
        console.log('It\'s saved!');
    });
},10000);

function rootHandler(res, req){
    for (var key in g_table){
    	res.write(key + ":" + g_table[key].val + "\r\n")
    }
    res.end(g_table.length);
}

function addHandler(res, req){
    if(req.method == 'POST'){
        var body = '';
        req.on('data', function (data) {
            body += data;
        });
        req.on('end', function () {
	    var POST = qs.parse(body);

	    if(g_table[POST.key]===undefined){
	    	g_table[POST.key] = {ts:Date.parse(new Date()),val:parseInt(POST.val)}
	    } else {
	        g_table[POST.key].val = parseInt(g_table[POST.key].val) + parseInt(POST.val)
	    }
	    if(g_table[POST.key].val > 20) {
	    	console.log(POST.key + ":" + g_table[POST.key].val);
	        delete g_table[POST.key];
	    }
	});
    }
    res.end("OK");
}

客户端(node client.js a 3)

var http = require('http'),
    qs = require('qs');

//The url we want, plus the path and options we need
var options = {
    host: '127.0.0.1',
    port: 8080,
    path: '/add',
    method: 'POST'
};

/*process.argv.forEach(function (val, index, array) {
    console.log(index + ': ' + val);
});*/

var k = (process.argv)[2];
var v = (process.argv)[3];
var postdata = qs.stringify({
key:k, val:v
});

var processPublicTimeline = function(response) {
	var body='';
	response.on('data', function (chunk) {
		body += chunk;
	});
	response.on('end',function() {
	        console.log(body);
        });
	response.on('error', function(e) {
		console.log('problem with request: ' + e.message);
	});
};

var req = http.request(options, processPublicTimeline);
req.write(postdata);
req.end();

 

 

分享到:
评论

相关推荐

    prometheus、node_exporter、pushgateway插件

    安装在每台需要监控的服务器上,node_exporter会收集如CPU使用率、内存使用、磁盘I/O、网络流量等本地节点状态信息,并将其转换为Prometheus可理解的格式,以便Prometheus server能够抓取这些数据。 Pushgateway是...

    node-red-contrib-ui-state-trail:Node-RED仪表板小部件。 甘特型图表可直观显示一段时间内的状态变化

    节点红色贡献状态线索描述 Node-RED仪表板小部件。 甘特型图表可直观显示一段时间内的状态变化。警报版本0.3.0的重大更改。 如果您使用的是此节点的输出,并且您的流程使用了msg.clickCoordinates ,则需要将此属性...

    Node.js-一个轻量级日志记录器底部带有状态栏滚动时不会消失

    这在调试、监控或处理大量日志输出时尤其有用,因为它可以提供持久性的状态信息,如进程状态、错误计数等,而不会被新的日志条目覆盖。 描述简洁地概述了这个日志记录器的核心功能,即轻量级设计和具有状态栏的特性...

    node-red-contrib-statistics:Red Red节点,用于计算流的统计信息

    节点红色统计 计算有关输入数据的统计信息。 这是“节点库的包装。 输入项 通常,将输入属性的值保存到数据集中。 input property还可以包含一个值数组,该值将保存到数据集中。 如果data set size大于0,则数据集的...

    Node.js开发指南微博例子

    这可能涉及更新微博的点赞计数和用户点赞状态等操作。 在前端,我们可以使用HTML、CSS和JavaScript构建用户界面。对于Node.js应用,通常会结合使用Express框架,它简化了HTTP服务器的创建和路由处理。通过Express,...

    Discord-Fivem-Serverstats:不和谐| 一个简单的node.js机器人,用于在不和谐频道中发送Fivem服务器的服务器状态,玩家计数和玩家列表

    一个简单的node.js机器人,可将Fivem服务器的服务器状态,播放器列表和播放器计数发送到Discord频道。 需求 您需要安装Node.js并在此页面上使用不和谐的bot令牌: : 安装 下载文件并安装node.js后,在项目文件夹中...

    react 计数例子

    总的来说,"React 计数例子"是一个基础的教程,涵盖了React的组件化、状态管理、事件处理等核心概念,是学习React开发的良好起点。通过实践这个例子,开发者能更好地理解React的工作方式,并为更复杂的React应用开发...

    remote_node_table.rar_The Count

    "remote_node_table.rar_The Count"这个标题暗示了我们关注的重点是关于远程节点计数的实现,可能涉及到数据结构、内存管理和网络协议等方面的知识。 描述中提到的“这是用一个字节表示的远程节点数量的计数”,这...

    Node.js-基于nodejssocket.iomongodbredis实现的聊天应用

    在聊天应用中,Redis可以作为Socket.IO的事件总线,存储短暂的、实时的数据,比如用户在线状态、未读消息计数等。Redis的订阅/发布(Pub/Sub)模式使得服务器能够广播消息到所有订阅的客户端,实现消息的快速分发。 ...

    clickityclack:Node.js中的简单人计数器

    "clickityclack"项目通过以上技术和概念,实现了在Node.js环境中计数的功能。通过深入学习和实践这些知识点,开发者不仅可以理解如何创建一个简单的计数器,还能进一步提升在Node.js和JavaScript中的技能。对于想要...

    storm-drpc-node:适用于Node.js的Apache Storm DRPC客户端

    Storm-drpc节点适用于Node.js的Apache Storm DRPC客户端受启发,但不同之处在于可以选择将其设置为保持活动状态,它不需要在每个execute()调用中都创建连接,并且可以喜欢的传统方式或promise方式使用它。...

    Node.JS匿名在线聊天室 v0.0.1

    这可以通过维护一个用户在线状态的数据库或数据结构来实现,每当有用户连接或断开时,都会相应地增加或减少计数。同时,这个功能可能还会涉及到前端界面的实时刷新,以展示最新的用户统计数据。 核心技术包括: 1....

    监控hyperdrive或dat的运行状况包括每个计数和每个镜像百分比

    在这个场景中,我们要关注的是如何监控这两个组件的运行状态,包括每个计数和每个镜像的百分比,这有助于我们理解系统的健康状况,及时发现并解决问题。 "Hyperdrive"通常是指一个快速、轻量级的分布式文件系统,它...

    在线人数统计

    当用户事件触发时,JavaScript可以通过AJAX(Asynchronous JavaScript and XML)发送异步请求到服务器,报告用户的状态改变。如今,更常用的API是`fetch`或`XMLHttpRequest`。 4. **计数逻辑**: 服务器端接收到...

    详解一些适用于Node.js的命名约定

    - 计数功能以`count`开头,计数对象用复数,如`countPaidOrders`。 7. 构造型函数的命名: - 创建对象时,使用`create`、`build`、`make`或`compute`等动词,如`createUser`,`buildConfig`。 8. 类与模块的命名...

    Node.js pipe实现源码解析

    如果write操作失败(即ret === false),并且没有增加awaitDrain计数(increasedAwaitDrain为false),那么就会暂停Readable流,防止进一步的数据传输。 错误处理和事件绑定 在pipe()函数中,对错误处理进行了特别...

    八数码问题

    - 包含了当前状态的所有相关信息如:`nodevalue`(节点的数值)、`nodenumber`(节点编号)、`nodefather`(父节点编号)、`flag`(标志位)、`depth`(深度)、`sourse_matrix`(初始矩阵)、`matrix`(当前矩阵)...

    c语言数据结构几个链表操作List.zip

    无空头单链表不包括专门表示链表起始的空节点,而有空头单链表则包含一个额外的头节点,通常用于存储链表的状态或作为操作的起点。 1. **定义和初始化**: - 在C语言中,定义链表节点通常使用结构体类型。例如,...

    session统计在线人数.rar

    **在线人数计数:Java Session统计实战** 在这个关于"session统计在线人数.rar"的压缩包中,包含了Java编程语言的一个示例项目,主要用于演示如何通过session对象来跟踪和统计网站或应用程序中的在线用户数量。Java...

    西电人工智能化大作业.doc

    提供的源代码使用了结构体`node`来表示棋盘的状态,包括数字矩阵、错误计数(W)、深度、父节点和下一个节点的指针。`CounterW`函数计算当前状态与目标状态的差异,`PrintNode`用于打印节点状态,`CheckNode`检查...

Global site tag (gtag.js) - Google Analytics