如何用 node.js 统计用户访问时间

2017-11-22 10:58:29 +08:00
 inkWave

才学习使用 nodejs 不久,在学习的过程当中产生了一个疑问。比如说用 node 实现一个功能: 从用户访问开始,每秒输出该用户的访问时间统计。比如我访问了就每秒输出 1 秒、2 秒、3 秒、4 秒、5 秒…… 但是我现在就实现了第一个用户访问的时候,执行这个函数。 后面的用户再访问,就会把函数重新执行了。 不知道怎么做可以统计用户各自的时间互不干扰。 用前端 js 实现这个功能,我知道怎么写。我就是想学习一下,这种问题用 node.js 该如何解决呢?

还有个问题, cluster 我也看了,各种 demo 里都是按照 CPU 数量来分配 worker 的。感觉这是做负载均衡之类的功能的吧?如果我用 cluster 来实现给每一个用户分配一个 worker 来解决上面的问题,是不是不对?

提前感谢各位花时间指点我~谢谢~

5091 次点击
所在节点    Node.js
21 条回复
sodawy
2017-12-23 13:01:20 +08:00
1、node 是如何做到请求之间变量互不干扰的? node 默认时是单进程单线程在处理请求(我们先不谈 cluster 和 threadpool ),单线程内的 eventloop 中有个 i/o callback 的 queue,每个请求来了之后就会进这个 q,eventloop 处理到 i/o callback 这个阶段时,就会从这个 queue 里取请求依次运行其 handler,由于每个请求都在自己的 function 上下文中(运行栈),变量是互相隔离的。

2、如何实现,用户来了之后,一直在服务器端打印? 问题 1 中说了,每个请求 function 运行时互相隔离的,请求结束了,这个 function 堆栈中的变量就访问不到了。但楼主想请求结束了,还一直打印(直到另一个请求来了,告诉我停止打印)。你可以用 setInterval 不停打印,然后把这个 timer 句柄保存在一个进程级全局的变量(process\global)或存储(file\db)中,收到用户走了的请求后,根据用户 id,找到这个 timer 句柄(其实就是一个整数),clearInterval 掉就可以了。

3、如何设计前后端的交互? 前端想清楚如何判定啥时候用户来了、走了,如何标识同一个用户,并把这些信息通过 http 或 ws 发给后端。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/408505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX