我有一个运行网站的Node.JS express服务器,我想为用户添加一个网站的在线正常运行时间到前端。目前,当用户请求页面时,我将数据传递到网站。我希望有正常运行时间显示现场(更新的页面生活),我已经尝试使用socket.io与此代码。
io.sockets.on('connection', function(sockets){
var uptime = process.uptime();
const date = new Date(uptime*1000);
const days = date.getUTCDate() - 1,
hours = date.getUTCHours(),
minutes = date.getUTCMinutes(),
seconds = date.getUTCSeconds(),
milliseconds = date.getUTCMilliseconds();
let segments = [];
if (days > 0) segments.push(days + ' day' + ((days == 1) ? '' : 's'));
if (hours > 0) segments.push(hours + ' hour' + ((hours == 1) ? '' : 's'));
if (minutes > 0) segments.push(minutes + ' minute' + ((minutes == 1) ? '' : 's'));
if (seconds > 0) segments.push(seconds + ' second' + ((seconds == 1) ? '' : 's'));
const dateString = segments.join(', ');
io.sockets.emit('count', {count:dateString})
})它似乎工作了2秒(更新两次),然后没有更多的数据被发送到前端。关于如何将process.uptime();发送到前端,有什么想法吗?干杯
编辑:我需要添加一个setInterval(function()并从一个const更新dateString这里是服务器更新后的代码,
io.sockets.on('connection', function(sockets){
setInterval(function(){
var uptime = process.uptime();
const date = new Date(uptime*1000);
const days = date.getUTCDate() - 1,
hours = date.getUTCHours(),
minutes = date.getUTCMinutes(),
seconds = date.getUTCSeconds();
let segments = [];
if (days > 0) segments.push(days + ' day' + ((days == 1) ? '' : 's'));
if (hours > 0) segments.push(hours + ' hour' + ((hours == 1) ? '' : 's'));
if (minutes > 0) segments.push(minutes + ' minute' + ((minutes == 1) ? '' : 's'));
if (seconds > 0) segments.push(seconds + ' second' + ((seconds == 1) ? '' : 's'));
dateString = segments.join(', ');
sockets.emit('count',{count:dateString}); }, 1000);
})和客户端代码
<script>
var socket = io();
socket.on('count', function(data){
$('#count').html(data.count);
});
</script>结果:

发布于 2021-01-13 21:20:03
当客户端连接时,您似乎只向连接的客户端发出正常运行时间。每次客户端连接时,“connection”事件下的函数都会运行。
如果你想让它自动运行(比方说,每秒钟),你可以设置一个间隔,每秒发出正常运行时间状态。
https://stackoverflow.com/questions/65702653
复制相似问题