Веб-сокет не открывается на других машинах

Ошибка подключения к веб-сокету

У меня проблема с моим сервером. Он использует express и express-ws для веб-сокетов. Проблема в том, что этот сервер отлично работает на локальном хосте. Но когда я запускаю его с помощью ssh (см. localhost.run) и захожу на сайт по указанной ссылке с другого компьютера (через Chrome), веб-сокет не открывается и в консоли появляется следующая ошибка

main.js:12 WebSocket connection to 'ws://localhost:3000/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

хотя я добавил cert и key в соединение с сервером. P.S. Сайт тоже загружается, вот только сокет не работает.


вот код server.js:

"use strict";
const fs = require("fs");

const credentials = {
  key: fs.readFileSync("./key.pem"),
  cert: fs.readFileSync("./cert.pem")
};

const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const https = require("https");

const PORT = process.env.PORT || 3000;

app.use(express.static(__dirname + "/public/Messenger"));
app.use(express.static(__dirname + "/public/Login"));
app.use(express.json());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

const server = new https.createServer(credentials);

const expressWs = require("express-ws")(app, server);//if i take the 
//second argument (server) away, it works fine on localhost:3000, but 
//with this it fires the error:

//WebSocket connection to 'ws://localhost:3000/' failed: Connection 
//closed before receiving a handshake response

const routes = require("./MVC/Router/router.js"); //importing route
routes(app);

app.listen(PORT, () => {
  console.info("listening on port " + PORT);
});

вот router.js:

   "use strict";
module.exports = function(app) {
  const database = require("../Controller/controller.js");

  // database Routes
  app.route("/").get(database.loadPage);

  app.route("/login").get(database.loginPageLoad);

  app
    .route("/signIn")
    .get(database.signInPageLoad)
    .post(database.signIn);

  app
    .route("/submitLogin")
    .post(database.loginSubmit)
    .get(database.showUsers);

  app.ws("/", database.sendmsg);
};

который перенаправляет поток обработки на следующую часть controller.js:

const CLIENTS = [];
let counter = 0;

exports.sendmsg = (ws, req) => {
  console.info(cache.get("lorem"));
  ws.on("message", msg => {
    if (msg === "connected") {
      console.info("connected");
      CLIENTS.push([ws, counter]);
      ws.send(JSON.stringify({ counter }));
      counter++;
    } else if (JSON.parse(msg).msg && JSON.parse(msg).ID) {
      CLIENTS.forEach(box => {
        if (box[1] === msg.ID) {
          console.info(`user ${box[1]} is closed`);
          box.push("closed");
          box[0].close();
        } else {
          return;
        }
      });
    } else {
      sendAll(msg);
    }
    ws.on("close", () => {
      console.info("disconnected");
      ws.close();
    });
  });
};

function sendAll(message) {
  for (let i = 0; i < CLIENTS.length; i++) {
    if (CLIENTS[i][0].readyState === 1) {
      CLIENTS[i][0].send(message);
    }
  }
}

Последний фрагмент кода — это то, что он делает на сервере, не обращайте на него особого внимания. Проблема в том, что веб-сокет не открывается, когда я ввожу ссылку с другого компьютера. Как я могу это решить?

Есть ли ошибка? Что не понятно?

KarlR 11.02.2019 22:56

Веб-сокет не открывается на клиентах других машин

Igor Karpiuk 12.02.2019 00:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
125
0

Другие вопросы по теме