一直无法在 Ubuntu 服务器上创建和连接到 websocket 服务器

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

我正在运行以下内容:

Ubuntu 22.04.2 LTS 上的 Plesk PLSK.10247462.0001

我使用 cloudflare 作为 DNS 服务器并将 a 记录(代理)指向我的 ubuntu 服务器

我在那里有一个域并运行一个完美运行的 codeigniter 4 应用程序。 Plesk 正在管理我的防火墙,我有Allow incoming from all on port 8080/tcp

我尝试了很多方法来运行 websocket 服务器,包括在 codeigniter 上使用棘轮,然后以大约 15 种不同的方式使用

php server.php
,但连接总是失败。我看到了以下错误:

与“ws://localhost:8080/”的 WebSocket 连接失败: ERR_SSL_PROTOCOL_ERROR 和其他但我忘记了它们

我尝试使用 wss 而不是 ws 并尝试更改端口

这是我的 javascript 代码,它通常与任何方法保持一致:

const webSocket = new WebSocket('ws://localhost:7777');

    webSocket.addEventListener('open', (event) => {
      console.log('WebSocket connection opened.');
      webSocket.send('Hello, server!');
    });

    webSocket.addEventListener('message', (event) => {
      console.log('Received message: ' + event.data);
    });

    webSocket.addEventListener('close', (event) => {
      console.log('WebSocket connection closed.');
    });

我最近的尝试是使用 node.jsexpress ws 运行服务器,我采取的步骤如下:

1: 在 /var/www/domain 中创建名为 webs 的文件夹 2:初始化 npm 并运行

npm install express express-ws

3:创建了一个包含以下内容的 server.js 文件:

const express = require('express');
const expressWs = require('express-ws');

const app = express();
expressWs(app);

app.ws('/', (ws, req) => {
  console.log('WebSocket connection opened.');
  ws.send('Hello, client!');
  ws.on('message', (message) => {
    console.log('Received message: ' + message);
  });
  ws.on('close', () => {
    console.log('WebSocket connection closed.');
  });
});

app.listen(8080, () => {
  console.log('WebSocket server listening on port 8080.');
});

4:通过执行此命令运行服务器

node server.js

我得到输出“WebSocket 服务器侦听端口 7777。”我看到端口 8080 突然打开,但此时出现以下错误“WebSocket 连接到‘ws://localhost:8080/’失败:”

我认为我遗漏了一些基本的东西,因为我已经尝试了超过 15 种方法,有些方法需要 20 分钟才能完成设置。有时端口保持关闭状态,即使我可以使用

lsof -i :8080
看到使用端口的进程,有时端口打开但连接永远不会成功。我也尝试过使用公共 IP 和 1270.0.0.1 但无济于事。我在这里缺少什么吗?

我知道我在用于 plesk 的同一台服务器上运行 websocket 服务器,另外,我不确定我将如何让 wss 工作,我需要一个自签名证书吗?任何以不同方式设置它的建议将不胜感激。

谢谢

node.js linux ubuntu websocket plesk
© www.soinside.com 2019 - 2024. All rights reserved.