Как делать запросы от бэкэнда к другому серверу на локальном хосте пользователя

У меня стандартная конфигурация клиент-сервер с ReScript (ReasonML) во внешнем интерфейсе и сервером Python во внутреннем.

Пользователь запускает отдельный процесс на localhost: 2000, к которому я подключаюсь из браузера (пользовательского интерфейса). Я могу отправлять запросы на их сервер и получать ответы.

Теперь мне нужно отправить эти запросы с моего внутреннего сервера, но я не могу сделать это напрямую. Я предполагаю, что мне нужен какой-то способ сделать это через браузер, который может взаимодействовать с localhost на компьютере пользователя.

  1. Каковы концептуальные способы реализации этого (в идеале с помощью GraphQL)? Нужна ли мне подписка, или веб-сокеты, или что-то еще?

  2. Можете ли вы порекомендовать для этого какие-то конкретные библиотеки (возможно, в качестве примеров из других языков программирования)?


person Peteris    schedule 30.08.2020    source источник


Ответы (1)


Я думаю, что самым простым решением с GraphQL было бы действительно использовать подписки, наиболее распространенные клиенты Rescript GraphQL уже имеют такую ​​функцию, по крайней мере, ReasonRelay, Он есть у Reason Apollo Hooks и Reason-URQL.

person tsnobip    schedule 31.08.2020
comment
Не могли бы вы рассказать, как клиент отреагирует на подписку? Подписки AFAIK - это один путь от сервера к клиенту, но в этом сценарии мы эффективно выполняем асинхронный запрос от сервера к клиенту и инвертируем отношения сервер-клиент. - person Peteris; 31.08.2020
comment
Я предполагаю, что точная реализация будет зависеть от клиентской библиотеки, которую вы будете использовать, но в основном вы должны либо отправить мутацию в один из обратных вызовов параметров хука (onNext, onCompleted) в зависимости от вашего варианта использования, либо с помощью Relay the компонент, ссылающийся на подписанное значение, будет автоматически повторно отображен, и вы вызовете мутацию в зависимости от результата вашей подписки. - person tsnobip; 31.08.2020
comment
Наконец-то понял - мне нужно эффективно приостановить выполнение на стороне сервера между отправкой подписки и получением новой мутации. Есть ли какой-то подход / соглашение для этого, о котором вы бы знали? В собственном Python это будет yield операция, но это другое, потому что мутация не обязательно будет связана с местом, где произошло yield - ›она попадет в конечную точку GraphQL. - person Peteris; 31.08.2020
comment
Я задал дополнительный вопрос здесь: stackoverflow.com/questions/63673027/, чтобы получить полное решение. - person Peteris; 31.08.2020