node.js - 在托管的 plesk 服务器上运行 node,js(使用 windows IISnode)
问题描述
我正在尝试使用 node.js (v12.20.1) 做一些事情,但对设置监听器的明显要求感到困惑。
例如,我正在查看https://nodejs.org/en/knowledge/HTTP/servers/how-to-create-a-HTTP-server/上的说明
在其他地方,我发现无法在 plesk for windows 中使用任意端口,因此我稍微修改了示例以使用推荐的process.env.PORT而不是 8080:
const http = require('http');
const requestListener = function (req, res) {
res.writeHead(200);
res.end('Hello, World!');
}
const server = http.createServer(requestListener);
server.listen(process.env.PORT);
因此,我将上述内容放在 web 服务器上的 app.js 中,将浏览器指向我的 web 域,浏览器Hello World
按预期显示。到目前为止还好。
但下一步建议我访问 localhost:8080。
- 我在托管的 Windows 服务器上运行,而不是本地主机,所以我应该用我的服务器的 Web 域替换它。
- 但我也应该用 process.env.PORT 配置的任何内容替换 8080
- 所以我包括一个 res.write 来显示它的价值,它提出了类似的东西
\\.\pipe\768aaebc-ead4-42d8-9759-0b3e0918f8f4
- 如何将浏览器指向管道?
我开始思考:我真的需要设置一个监听器吗?因为似乎 IISnode 已经在响应我的 Web 域上的流量。
所以,我暂时忽略监听器,并用不同的测试替换以上所有内容:
const http = require('http');
setInterval(doSomething, 60000);
const requestListener = function (req, res) {
res.writeHead(200);
res.end('Hello, World!');
}
const server = http.createServer(requestListener);
server.listen(process.env.PORT);
function doSomething()
{
console.log("Did something at " + Date());
}
现在将浏览器指向我的网络域。它显示Hello World
. 几分钟后,我在服务器上找到了 console.log 文件,它按预期显示:
Did something at Sat Mar 13 2021 11:34:53 GMT+0000 (Greenwich Mean Time)
Did something at Sat Mar 13 2021 11:35:53 GMT+0000 (Greenwich Mean Time)
Did something at Sat Mar 13 2021 11:36:53 GMT+0000 (Greenwich Mean Time)
让它等待 20 分钟,我有 20 个这样的日志条目。但它在第 20 分钟后停止。我假设有一些未记录的执行时间限制。但它并不一致,并且每次我测试它时都会逐渐减少。
- 刷新浏览器以重新启动它。这次我可能只有 12 个日志条目。
- 下次只要10
- 那么也许只有 8
- 我在 doSomething 代码中放了什么似乎并不重要。
- 这似乎是执行时间限制,而不是间隔数。如果我将 setInterval 时间增加到 4 分钟,我只会得到更少的时间间隔并且不会增加时间
- 然而 setInterval 使用 int32,因此理论上应该支持天间隔而不是分钟。
服务器的 stderr 日志只提供一个线索:(node:29144) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
这可能是需要 http 正在做的事情,而且可能不是我可以轻松修复的事情......?
更奇怪的是,一旦执行时间开始减少,通过 plesk 面板重新启动服务器并不会恢复原来的 20 分钟。然而,有时将 app.js 文件的名称更改为其他名称。
关于增加执行时间的任何想法?
- 至少 40 分钟,并且始终如一?
- 如果有某种方法可以 ping 侦听器端口,那会扩展它吗?
- 上面的代码在其他 node.js 服务器上是否可靠地工作(超过 20 分钟)?
提醒:我只是虚拟主机的客户。因此,我只能访问 plesk 控制面板提供的配置选项。我无法在服务器上执行 shell 脚本。
解决方案
推荐阅读
- angular8 - 如何自定义角度材质表单字段
- node.js - Hyperledger Fabric 2.0,无法使用 Node.js SDK 访问用户的 Fabtokens
- android - 使用 gradle 编译时,我缺少 x86_64 文件夹。为什么?
- python - 有没有办法将 groupby 对象转换为 DataFrame?
- kubernetes - 无法修复在 kubernetes 中挂载 nginx 配置文件的错误
- python - 从字典外的列表中获取键值
- reactjs - ReactJS socket.io 在 socket 下定义或调用的任何函数都会给出类型错误而不是函数
- web-component - 预渲染使用 StencilJS Web 组件构建的网站页面
- ios - ViewController - 全屏
- php - 查询上个月的假期/病假