Gist
У меня есть приложение, которое работает на архитектуре на основе микросервиса (в Kubernetes). Все взаимодействие с приложением и извне происходит через API Gateway .
. Это означает, что запросы от моего интерфейса не go напрямую к сервисам, но они должны go через шлюз.
Мотив
Теперь мне нужно реализовать функцию, которая требует связи в реальном времени между внешним интерфейсом и внутренней службой. Но поскольку внутренняя служба не подвержена внешним воздействиям, мне нужен способ «маршрутизировать» данные в реальном времени через шлюз.
Все мои службы работают на Node.js, и именно поэтому я хочу используйте Socket.IO для осуществления связи в реальном времени.
Проблема
Но как реализовать фиолетовую двойную стрелку из эскиза?
Таким образом, обычно клиент внешнего интерфейса подключается к серверу, на котором работает Socket.IO. Но в моем случае этот сервер (сервер функций реального времени) недоступен с клиента (и никогда не должен быть), что означает, что клиент должен подключиться к шлюзу. Таким образом, шлюз должен реализовать некоторый механизм для маршрутизации всех входящих сообщений в службу реального времени и наоборот.
Идеи
(1) Второй сервер HTTP прослушивает события на шлюзе и отправляет те события на сервер в реальном времени. В другом направлении сервер реального времени отправляет события на шлюз, который затем отправляет их на внешний интерфейс. Я думаю, что этот подход определенно сработает, но, кажется, излишне все излучать дважды. И это определенно повредит производительности?
(2) Используйте адаптер Socket.IO для " передачи события между узлами ", что выглядит как правильный путь к go, потому что он используется «передавать сообщения между процессами или компьютерами». Но у меня проблемы с началом работы из-за отсутствия документации / примеров. Я также не использую Redis (нужно ли использовать адаптер?)
(3) Используйте пакет socket.io-emitter , который, похоже, не является хорошим вариантом с момента последнего коммит был от 3 лет go.
(4) Что-то еще?