服务器 24/7 全天候运行?"/>
如何保持 node js 服务器 24/7 全天候运行?
我在 cpanel 上托管了节点 js 服务器。该服务器在停止前运行大约 1 到 3 小时。我正在使用 node js 的 14.21.2 版本。
下面是我的代码:
const express = require("express");
const WebSocketServer = require('ws');
const WebSocket = require('ws');
var admin = require("firebase-admin");
var serviceAccount = require("somejson.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: ""
});
var reconnectInterval = 1000 * 10;
//connect to twelve
var rootRef = admin.database().ref();
var p = 0;
function connect() {
const ws2 = new WebSocket("wss://ws.somedomain/v1?apikey=someapikey");
ws2.addEventListener("open", () => {
ws2.send('{ "action": "subscribe", "params": { "symbols": "AANF" } }');
});
ws2.addEventListener("close", (eve) => {
//
setTimeout(connect, reconnectInterval)
});
ws2.addEventListener("error", (err) => {
//
console.log("Error: " + err.code);
});
ws2.addEventListener('message', function(event) {
var received_msg = JSON.parse(event.data);
p = received_msg["p"];
if (p > 0) {
rootRef.child("Xeex").child("Data").child("p").set(p);
}
});
}
//start socket
connect();
//
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
var message = 'The server is running...\n',
version = 'NodeJS ' + process.versions.node + '\n',
response = [message, version].join('\n');
res.end(response);
});
server.listen();
所以让我把它分解成几个部分和步骤: 当我在 cpanel 上创建这个节点 js 应用程序并单击启动应用程序按钮时,websocket ws2 没有被触发,因为我认为它应该在应用程序启动时立即打开连接。我怎么知道 ws2 没有被触发?如果我检查我的 firebase 数据库,没有任何更新,所以要触发这个 ws2 我必须在浏览器中打开应用程序托管的 url:ie.
www.myapp.mydomain.
如果我在浏览器上打开此链接,ws2 开始工作,因为它从 API 接收数据并将其发布到我的 firebase。所以我的第一个问题是:
如何正确设置此代码,以便如果我从 cpanel 启动应用程序,ws2 会自动开始工作,而无需在浏览器上加载链接。
第二期: 当 ws2 开始工作时,工作大约 1 到 3 小时后停止。大约 3 小时后,我的 firebase 将不会发布任何更新,这意味着 websocket ws2 已断开连接或其他原因,但我尝试像这样设置重新连接:
ws2.addEventListener("close", (eve) => {
//
setTimeout(connect, reconnectInterval)
});
这似乎不起作用。我还尝试检查是否有任何错误发生如下:
ws2.addEventListener("error", (err) => {
//
console.log("Error: " + err.code);
});
但是日志中没有任何内容显示为错误。我还尝试联系 API 提供商,认为问题可能出在他们的服务器上,但他们的回应显然不是我认为的那样,因为他们的工作进展顺利。
据我所试,我认为这可能是编码不当,也许我的代码中缺少某些东西,因为我根本没有得到任何错误代码。我什至从 cpanel 检查以检查应用程序是否正在运行或已停止,它肯定是从那一边运行的。所以要在它停止后重新启动这个服务器,我必须在浏览器中重新加载服务器 url 来启动它,一旦我完成它运行大约 1 小时左右然后再次停止。
所以我的第二个问题是如何更正我的代码,以便我的服务器不停地运行?
注意:当我通过命令提示符 (cmd) 在本地机器上运行服务器时,也会发生此问题,它在 1 小时左右后停止从 API 接收数据,没有任何错误!
回答如下:更多推荐
如何保持 node js 服务器 24/7 全天候运行?
发布评论