无法让 WebSocket 服务器在子域(Plesk、Linux、NodeJs、Express)上运行

问题描述 投票:0回答:1

我自己开发了一个完美运行的小型 WebSocket 服务器(本地 - 在我的 IDE 上)。问题是我想将它托管在我创建的特定子域下使用 Plesk 管理的服务器上:

ws.my-url.de
.

这是我的

server.js
文件:

const {logInfo}       = require('./logger');
const WebSocketServer = require('ws').Server;
const express         = require('express');
const uuid            = require('node-uuid');

const app = express();
const wss = new WebSocketServer({
    server: app.listen(process.env.PORT || 8888)
});

logInfo('WebSocket Server successfully started');

wss.on('connection', ws => {
    ws.id = uuid.v4();

    logInfo(`Client connected: ${ws.id}`);

    ws.on('message', function () {
        logInfo(`New message from client: ${ws.id}`);
    });

    ws.on('close', function () {
        logInfo(`Client: ${ws.id} closed connection`);
    });
});

wss.on('close', function () {
    logInfo('WebSocket Server stopped');
});

app.post('/', function (req, res) {
    logInfo(req);
});

我还实现了一个记录器,该记录器可以注销到一个文件,该文件也很好用(直接在启动时,例如我的启动消息),但在我服务器上的

logs
文件夹中是一个打哈欠的空虚。

我真的无法让我的 WebSocket 服务器在我的服务器上运行。为了不遗余力,我已经从

disabled the proxy mode
nginx
但是在尝试连接到
wss://ws.my-url.de
之后我收到了这个错误:

WebSocket connection to 'wss://ws.my-url.de/' failed: Error during WebSocket handshake: Unexpected response code: 500

所以我可以说我的服务器没有启动。为了真正确定(并排除其他事情),我写了一个在互联网上找到的小 http 服务器,它在按下

Restart App
按钮后直接开箱即用(我在浏览器窗口中看到了响应):

const http = require('http');

http.createServer(function(request, response) {
  response.writeHead(200, {'Content-Type': 'text/html'});
  response.end('App is running…');
}).listen(process.env.PORT);

顺便说一句,这是我的配置:

当我尝试启动我的 WebSocket 服务器后打开 URL 时,出现此错误:

那么我在这里做错了什么?我不想要一个我可以打开的页面,我只想让它作为一个可以通过我的子域访问的小服务运行。我对此感到非常不知所措,并感谢每个可以帮助我的人。

node.js linux websocket server subdomain
1个回答
0
投票

您必须将应用程序模式从生产模式更改为开发模式,才能看到该错误消息背后的真正问题,因为该应用程序甚至没有运行,它可能就像没有安装 npm 一样简单。

如果禁用了 apache 代理,websockets 也只能在 Plesk 上工作,所以你应该只使用 ngnix。

将它们放在子域上没有问题,我已经在运行 aws lightsail 的 Plesk 上多次完成了。前任。 Api.domain.com

© www.soinside.com 2019 - 2024. All rights reserved.