Реализация веб-сокетов в приложении микросервисов - PullRequest
0 голосов
/ 29 декабря 2018

У меня довольно сложное упражнение, но я до сих пор справлялся хорошо.Единственное, что мне осталось сделать, это добавить в микс WebSockets.

Это простое приложение для голосования по двум темам, но я должен использовать определенные технологии для использования в определенных частях.Кроме того, все работает в Docker.

Вот архитектура моего приложения:

architecture

В настоящее время приложение работает на HTTP-запросах, но я должен реализоватьWebSockets как-то.Я знаю, что мне нужно связать Angular, но какой еще?

Как мне реализовать WebSockets в этом случае?

1 Ответ

0 голосов
/ 29 декабря 2018

Веб-сокеты имеют много общего с https.Фактически они начинают свою жизнь как соединения https, а затем обновляют до постоянных соединений через веб-сокеты.

Итак, ваш клиент (Javascript в вашем браузере) инициирует соединение, используя экземпляр объекта WebSocket .Затем он может отправлять и получать сообщения на сервер и с сервера.Ваш код браузера может выглядеть следующим образом.Он инициирует соединение.Когда соединение открывается, он отправляет сообщение.

const ws = new WebSocket("ws://www.example.com:8090/socketserver");

ws.onmessage = function (event) {
    console.log ('incoming', event.data);
}

ws.onopen = function (event) {
    ws.send ("Hey there server!");
}

На стороне сервера (nodejs) необходимо настроить сервер веб-сокетов, чтобы принимать клиентские подключения.Вы можете сделать это с помощью пакета npm .(Есть и другие пакеты, но я знаю, что этот работает.)

Ваш минимальный жизнеспособный код сервера ws также довольно прост.

const WebSocket = require('ws');
... 
const wss = new WebSocket.Server({ port: 8090 });

wss.on('connection', function connection(ws) {
  /* Here an incoming websocket connection is accepted 
   * You must keep the ws object in scope for the lifetime
   * of the connection */

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

  /* respond to ping keepalives from client */
  ws.on('ping', function ping() {
      ws.pong();
  }

  /* send messages as needed */
  ws.send('hey there client!');
});

Обратите внимание: защита браузера не позволяет вамсмешивать режимы соединения (https / http) от браузеров до серверов.Поэтому, если остальная часть вашего внешнего интерфейса обслуживается через https :, вам нужно будет использовать wss: вместо ws :.Это немного сложнее для установки на стороне сервера, но все равно работает так же.

Также обратите внимание, что я не дал никаких ошибок или обработки тайм-аута.Производственный код нуждается в этих вещах.

...