如何设置ExpressInterval应用程序?
一直在Google上搜索,尝试了一些东西,并想出了各种奇怪的解决方案来解决我的问题,而没有真正获得任何地方。我的问题是,我将如何设置我的express.js应用程序让它每30秒运行一次?如何设置ExpressInterval应用程序?
推理是这样的,我有一堆变化每变化约30s,我需要重新呈现页面,以便这些显示出来。我提出的“解决方案”遇到了EADDRINUSE错误,因为我试图在与旧的端口相同的端口上创建一个新的服务器,所以我明白在这里需要做某些事情来避免这种情况,但什么?
如果有人想知道我尝试过了什么,我已经尝试了process.exit(并让PM2重新启动我的应用程序),setInterval,故意撞毁我的应用程序让PM2重新启动,甚至开始重写所有东西以让Web套接字运行在客户端和服务器之间来回切换,但是我觉得这可能会使问题过于复杂(如果我刚刚了解如何,标准的setInterval将解决所有问题)。
下面是我的快递脚本:
var express = require('express');
var app = express();
var ejs = require('ejs');
var config = require('./config');
app.set('view engine', 'html');
app.engine('html', ejs.renderFile);
app.get("/", function(req, res){
app.use(express.static(__dirname + '/views'));
async(function(variables) {
res.render('index',
{
// stuff to render
});
});
function async(callback) {
// several variables...
callback(variables);
}
});
app.listen(config.port, "0.0.0.0");
你想谷歌的东西是:彗星,长拉,网络套接字,event sourcing。
基本上这就是我将如何对这项任务的工作:
在您的Web服务器有一个全球性的状态,简单的setInterval进行更新和setInterval不断做AJAX调用网页。
使用web sockets而不是
setInterval(AJAX)
将新状态推送给客户端。
第二种方法更快,更可取,但如果您需要支持旧版浏览器,则可能需要回退。
谢谢!这至少会给我一个好的开始。我会将其设定为我接受的答案。 :) – Erik
是否可以对接受的答案进行后续问题,还是应该为其创建新问题? – Erik
这里是我的问题: 我用websockets取得了很大的成功,但我陷入了一个不确定如何区分消息事件的情况。客户如何知道在下面的websocket onmessage中哪个事件应该发送到messageA/B?这是否设置在服务器上,如果是这样,如何? '''Client: ws.onmessage = function(event){ messageA(event.data); messageB(event.data); };' '服务器: ws.send(JSON。stringify(messageA),function(){...}); (JSON.stringify(messageA),function(){...}); ''' – Erik
你在服务器端尝试'setInterval'吗?这是行不通的。可以将它设置在客户端并在tick上重新加载数据或使用socket.io并将数据从服务器推送到客户端。 –