Отправьте сообщение клиентам через WebSocket во время express почтового запроса - PullRequest
0 голосов
/ 27 марта 2020

Я сейчас пытаюсь понять NodeJS и express. В настоящее время я хочу отправить сообщение подключенным клиентам на мой WebSocket, когда через express приходит запрос POST. Как я могу это сделать?

Это мой текущий код:

const WebSocket = require('ws').Server;
const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const server = new WebSocket({
    server: app.listen(8181)
});

app.use(bodyParser.json());

server.on('connection', socket => {
    socket.on('message', message => {
        console.log(`received from a client: ${message}`);
    });
    socket.send('Hello world!');
});

app.post('/', function (req, res) {
    console.log(req.body.name);

    res.sendStatus(200);
});

1 Ответ

1 голос
/ 27 марта 2020

Вы можете объявить переменную на верхнем уровне, а затем назначить ей подключенные сокеты. Затем используйте его для отправки сообщений своим клиентам. Например:

let ws = null;

server.on('connection', socket => {
  ws = socket;
  socket.on('message', message => {
    console.log(`received from a client: ${message}`);
  });
  socket.send('Hello world!');
});

app.post('/', function (req, res) {
  console.log(req.body.name);

  if (ws) ws.send('Welcome!');

  res.sendStatus(200);
});

Кроме того, это может работать, но в целом это не подходит для реальных приложений, где вы хотите масштабировать и повторно использовать! Поэтому я бы порекомендовал создать синглтон-класс для сокета. И использовать его в любом месте, где вы хотите. Здесь у меня есть предыдущий ответ здесь , который показывает, как это будет выглядеть.

Надеюсь, я помог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...