通过nodejs在共享cpanel主机上实现websocket服务器
Posted
技术标签:
【中文标题】通过nodejs在共享cpanel主机上实现websocket服务器【英文标题】:implementing websocket server by nodejs on shared cpanel host 【发布时间】:2020-04-23 04:48:24 【问题描述】:我已经获得了一个带有支持 nodejs 的 cpanel 的共享主机。我可以通过“设置 Node.js 应用程序”定义一个 node.js 应用程序。
我想做一个websocket。他们为我打开了 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 功能的共享主机?并在其上运行 websocket?
把主机卖给我的管理员完全是白痴,对此一无所知,无法帮助我......
提前感谢您的帮助。
更新:
如何在共享主机中运行 Node.js 和 python 不同于在 vps 中运行它们的方式。据我了解,phusion 乘客 用于共享主机。我遇到的问题可以由使用 Nodejs 在共享主机上工作并了解 phusion Passenger 工作方式的人解决。
【问题讨论】:
您是否尝试使用远程地址而不是 mydomain.com? ws://remote-addr:2088 @ritesh_NITW 是的 由于端口已经为入站/出站打开,可能是 Windows Defender 防火墙阻止了?如果是windows服务器,你能检查一下控制面板->系统和安全->windows Defender防火墙->允许的应用程序列表中是否有node.js。 @RiteshKumarGupta os 是 linux centos 。但是是共享主机! 共享主机的问题是:它们前面肯定有一个反向代理或负载均衡器。尽管他们已经为您打开了入站端口,但我不确定负载均衡器是否将请求进一步转发到服务器。我会回来的。 【参考方案1】:对于从 cPanel UI 部署的节点应用程序,cPanel 依赖Passenger 来管理部署。当发送 WebSockets 连接请求时,客户端通过请求中的 Connection 标头发送 HTTP 请求以“升级”。乘客响应标准 HTTP 请求,但不使用 Connection 标头做任何事情,因此 WebSockets 请求实际上被忽略了。如果您在浏览器中打开 JS 调试器并检查 WebSockets 目标资源,您实际上可以看到这种情况。
Phusion 在 GitHub 上发布了一个使用 socket.io 的 WebSockets 演示。在演示的 README 中,它指出 WebSockets 在Passenger 内部无法正常工作,因此它转而使用 HTTP 长轮询作为后备。然而,这个回退是 socket.io 中设计的一个功能,为了使其正常工作,Passenger 必须配置为使用粘性会话,这是一个当前未公开的选项到 cPanel 中的 UI。
如果您想将 node 用作 WebSockets 服务器,您将需要在Passenger 之外运行它,因此很可能需要退出共享托管环境。在 cPanel 上运行它是可能的,但必须提升您帐户的 shell 权限。
编辑: 你的问题真的让我很困扰,所以我又花了几个小时来解决这个问题。如果您真的很想从 cPanel 运行节点 WebSockets 服务器,您可以通过使用父应用中的 forever 调用服务器应用来完成此操作您已在 cPanel 应用程序管理器中注册。父应用将从Passenger 执行,然后您的服务器应用将通过forever 在Passenger 之外执行。乘客会抱怨使用节点集群模块,但它仍然可以工作。
确保您的父应用响应 HTTP 请求,因为您需要发送至少一个请求才能在Passenger 中实例化它。
【讨论】:
以上是关于通过nodejs在共享cpanel主机上实现websocket服务器的主要内容,如果未能解决你的问题,请参考以下文章
在 godaddy 共享主机上永远运行 node/express 应用程序