2016-02-12 2 views
0

Привет, у меня есть этот вопрос. Я еще не нашел anwser. Я хотел бы создать что-то вроде изображения, которое я прикрепляю. Final Structure I want to realizeМогу ли я перенаправить HTTP-запрос с одного узла.js или сервера python на другой сервер?

нормальный рабочий процесс должен быть чем-то вроде этого:

  1. Клиент посылает запрос на сервер 1;
  2. Сервер 1 получает запрос;
  3. Сервер 1 отправляет ответ 302 (перенаправление) клиенту;
  4. Затем клиент отправляет новый HTTP-запрос на сервер 2;
  5. Сервер 2 получает запрос;
  6. Сервер 2 отправляет 200 (ok) ответ клиенту;

Вместо этого я хотел бы реализовать что-то вроде:

  1. Клиент посылает запрос на сервер 1;
  2. Сервер 1 получает запрос;
  3. Сервер 1 перенаправляет запрос серверу 2;
  4. Сервер 2 получает запрос;
  5. Сервер 2 отправляет прямой ответ клиенту;

Так что я не хочу, чтобы отправить ответ перенаправления с сервера 1 к клиенту, а затем новый запрос от клиента к серверу 2!

Возможно, что-то подобное можно реализовать с помощью node.js или, по крайней мере, с помощью python ?. Я хочу, чтобы такая архитектура ускорила мой сервис, потому что соединение сервер-сервер намного быстрее, чем соединение клиент-сервер.

ответ

0

Вам необходимо использовать прокси-сервер.

Что-то вроде https://www.npmjs.com/package/http-proxy

или вы можете использовать Nginx или аналогичный перед Node.js сервера быть прокси.

Единственное запросы должны вернуться через прокси-сервер, потому что то, как TCP соединения работают

+0

Невозможно напрямую связаться с сервером 2 для клиента? Прохождение через сервер 1 будет пустой тратой ti me (потому что сервер 1 не может разрабатывать другие запросы) – Giuseppe

+0

Если вы правильно программируете сервер 1 - да, он может разработать другие запросы.Соединение с клиентом относится к серверу 1, и запрос и ответ должны сходить по тому же соединению. Веб-серверы предназначены для одновременной поддержки нескольких подключений, поэтому вы не блокируете другие запросы, а затем передаете запрос на сервер 2. Прокси, как это, стандартная практика для крупных веб-сайтов, где узким местом является сервер 2, а не сервер 1. – akc42

1

Если вам нужно сделать некоторую логику до сервер1 выполнить запрос server2 (например, выбора конечной точки в сервере 2 на основе некоторого условия по запросу), то вы можете использовать функцию запроса из стандартной библиотеки Node.js http (см. Документы на https://nodejs.org/dist/latest-v4.x/docs/api/http.html#http_http_request_options_callback). Но если вам не нужно выполнять какую-либо логику, лучше пойти с https://www.npmjs.com/package/http-proxy, потому что вы избегаете много кода шаблона.

+0

Да, мне нужно сделать некоторую логику. Во-первых, сервер 1 проверяет, присутствует ли файл в файловой системе - если файл присутствует, он возвращается обратно клиенту, иначе сервер 2 вызывается для извлечения файла. Поэтому я предполагаю, что первая возможность, которую вы упомянули, является правильной. Затем пропустите реализации, которые я действительно хочу знать, если на обратном пути к клиенту необходимо пройти сервер 1 с сервера 2 (это будет огромная трата времени) – Giuseppe

+0

Как только сервер1 выполнит HTTP-запрос на сервер2, вы можете ответ сервера2 в ответ сервера1. Таким образом, ответ server2 передается сервером1 клиенту. Прямое подключение от клиента к серверу2 не является строго возможным, поскольку запрос на сервер2 выполняется сервером1, а не клиентом. – yeiniel

Смежные вопросы