如何保持 node js 服务器 24/7 全天候运行?

编程入门 行业动态 更新时间:2024-10-04 09:29:38

如何保持 node js <a href=https://www.elefans.com/category/jswz/34/1771423.html style=服务器 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 全天候运行?

本文发布于:2024-05-30 11:11:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770435.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:服务器   node   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!