Как раскрутить сервер веб-сокетов параллельно с экспресс-приложением? - PullRequest
1 голос
/ 25 марта 2019

У меня есть экспресс-приложение и скрипт websocket.Я создаю сервер и раскручиваю приложение Express в файле www.js.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу создать экземпляр веб-сокета внутри файла www.js.

Вот www.js

....
const server = http.createServer(app);
server.listen(port);
server.on("error", onError);
server.on("listening", onListening);
....

Вот websocket.js

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.send('something');
});

Я знаю, что строка const wss = new Websocket.Server({ port: 8080 }); создает экземпляр websocket ... но я хочучтобы иметь возможность создать этот экземпляр в файле www.js и всю логику для веб-сокета в отдельном файле.

1 Ответ

1 голос
/ 25 марта 2019

Передать экземпляр http-сервера на сервер websocket,

const wss = new Websocket.Server({ server: server });

Если вы хотите отделить его как отдельный модуль от файла,

const WebSocket = require('ws');


const initWSServer = (server) => {
  const wss = new WebSocket.Server({ server: server});

  wss.on('connection', function connection(ws) {

    ws.on('message', function incoming(message) {
      console.log('received: %s', message);
    });

    ws.send('something');

  });
}

module.exports = {
  initWSServer
}

Тогда

const server = http.createServer(app);
server.listen(port);
server.on("error", onError);
server.on("listening", onListening);

const ws_server = require('./websocket.js');
ws_server.initWSServer(server);
...