2015-12-29 5 views
0

Как переносить веб-узел, который подключается к серверу A (который использует Socket.IO), к серверу B каждый раз при отправке данных и отправлять данные в этот сокет с сервера B. Но, помимо всего прочего, сокет не должен отправлять данные на сервер B напрямую, все данные, поступающие на серверы, должны поступать на сервер A. Могу ли я просто передать объект сокета с сервера A к B? Примечание. Любой сервер запросов B получает аутентификацию с сервера A.Перенос гнезда Socket.IO на другой сервер

Надеюсь, это не слишком запутывает, как это сформулировано. Вот текстовая диаграмма.

Socket -> Сервер -> Сервер B -> Разъем

ответ

1

Вы не можете передать сокет от одного сервера к другому. Данный TCP-сокет (на котором основан socket.io) находится только между двумя конкретными конечными точками, и вы не можете изменить это, как только сокет был подключен.

Ваш вопрос не совсем ясен, но похоже, что вы просто хотите, чтобы сервер A действовал как прокси-сервер, где клиент подключается к серверу A, а затем сервер A может решить перенаправить некоторые данные на сервер B. Вы можете либо использовать уже существующий прокси-сервер, который поддерживает ваш метод аутентификации вместо сервера A или если у вас уже есть процесс сервера A, то вы можете добавить к нему возможности проксирования, просто отправив соответствующие пакеты информации на сервер B.

Или вы можете подключить сокет к серверу A, аутентификацию через сервер A и как часть этого соединения, он может получить токен, который он мог бы использовать для непосредственного подключения к серверу B. Сервер A и B обмениваться доступом к некоторому «хранилищу токенов», чтобы сервер B coul d проверьте хранилище токенов, чтобы узнать, подало ли какое-либо входящее соединение действительный токен или нет.

+0

Я исправил свой вопрос. В основном в конечном итоге у меня есть служба, которая будет полагаться на веб-сокеты. Всякий раз, когда данные идут назад и вперед, его нужно аутентифицировать с помощью ключа API, и совместное использование этого в JS на стороне клиента не является действительно безопасным. –

+0

@ JakeCross - Хорошо, тогда это и принял мой ответ. Вы хотите, чтобы клиент только разговаривал с сервером A, но ему нужно пересылать запросы (например, прокси) на сервер B. – jfriend00

+0

Вся напряженная работа выполняется на наших серверах (B). Сервер A только что отправляет данные с помощью API-ключа, поэтому мы знаем, что все это хорошо. Если бы я все еще мог убедиться, что сервер A использует действительный ключ, а веб-серверы подключаются к серверу B, если это так здорово. –