在共享cPanel主机上通过NodeJS实现WebSocket服务器



我买了一个带有支持nodejs的cpanel的共享主机。我可以通过"设置节点.js应用程序"定义节点.js应用程序。

我想做一个网络套接字。他们为我打开了2088港口。

这是我的 websocket 服务器代码:

const http = require('http');
const WebSocket = require('ws');
const server = http.createServer();
const wss = new WebSocket.Server({ server });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
server.listen(2088);

好吧,我运行我的代码,然后将此请求从客户端发送到服务器:

socket = new WebSocket('ws://mydomain.com:2088');
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
socket.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
});

但是,我不断收到超时错误,无法连接到 websocket 服务器。

似乎在能够侦听特定端口的共享cpanel主机上制作websocket服务器与通常略有不同。

我已经梳理了互联网,我在cpanel nodejs上得到的只是如何使用cpanel菜单构建node.js应用程序。我找不到有关如何在共享cpanel主机上制作Websocket的任何解释。所有的消息来源都说,可以用 cpanel 上提供的 nodejs 制作一个 websocket。

现在,有没有人曾经拥有具有nodejs功能的共享主机?并在上面运行网络套接字?

把主机卖给我的管理员,完全是白痴,对此一无所知,也帮不了我......

提前感谢您的帮助。

更新:

如何在共享主机中运行 Node.js 和 python 与它们在 vps 中的运行方式不同。根据我的发现,phusion乘客用于共享主机。我遇到的问题可以通过与 Nodejs 在共享主机上工作并了解phusion 乘客工作方式的人来解决。

对于从 cPanel UI 部署的节点应用程序,cPanel 依赖于 Passenger 来管理部署。发送 WebSockets 连接请求时,客户端会通过请求中的连接标头发送 HTTP 请求以"升级"。乘客响应标准 HTTP 请求,但不对连接标头执行任何操作,因此 WebSockets 请求被有效忽略。如果您在浏览器中打开 JS 调试器并检查 WebSockets 目标资源,您实际上可以看到这种情况发生。

Phusion在GitHub上发布了一个使用socket.io的WebSockets演示。在演示的自述文件中,它指出WebSockets在Passenger中无法正常工作,因此它诉诸于使用HTTP长轮询作为后备。但是,此回退是设计在socket.io中的一项功能,要使其正常工作,必须将乘客配置为使用粘性会话,这是当前未向cPanel中的UI公开的选项。

如果你想使用node作为WebSockets服务器,你需要在Passenger之外运行它,因此很可能需要离开共享主机环境。可以在cPanel上运行它,但并非没有您帐户的提升shell权限。

编辑:
你的问题真的困扰着我,所以我又花了几个小时来研究它。如果您确实想从 cPanel 运行节点 WebSockets 服务器,您可以通过从您在 cPanel 应用程序管理器中注册的父应用程序永久调用服务器应用程序来实现此目的。父应用程序将从乘客执行,然后您的服务器应用程序将永久在乘客之外执行。乘客会抱怨使用节点集群模块,但它仍然可以工作。

请确保您的父应用响应 HTTP 请求,因为您需要发送至少一个请求才能在乘客中实例化它。

最新更新