2016-06-21 7 views
0

меня ниже сценария и хотели бы найти решение для этого:Раствор для 2-полосная communcation между общим сервером и серверами сети за NAT,

Частный Сервер находится за NAT, он не имеет фиксированного IP-адрес.

Public Server B имеет открытый IP-адрес.

Публичный сервер B должен будет отправлять сообщения на частный сервер A, следовательно, по бизнес-требованиям.

Я удивляюсь, есть ли какое-либо Java-решение для такого рода общения?

Поскольку частный сервер A не имеет фиксированного IP-адреса, он должен сначала предоставить возможность сообщать публичному серверу B свой IP/порт и т. Д., Или начать сначала соединение, такое как websocket. Затем поддерживайте соединение долгое время, а затем общедоступный сервер B может отправить данные обратно на сервер A.

Этот сценарий похож, но не совсем такой же, как перфорация отверстий UDP. Поскольку я новичок в Java, мне интересно, существует ли какая-либо существующая Java lib для такого случая?

Ограничения:

  1. Нам не разрешено настраивать NAT сети, что означает перенаправление портов не применяются.

  2. Будет много NAT. Внутри каждого NAT будет сервер (или кластер), сообщающий общему серверу. Поэтому решение websocket не может быть лучшим решением, так как он будет поддерживать общий сервер, поддерживающий множество подключений в памяти.

Благодаря

+0

Вы не можете инициировать подключение _into_ системы, которая находится за брандмауэром NAT, если не используется переадресация портов. Период. Конец истории. Это не имеет ничего общего с Java и зависит только от того, как работает NAT, и ничто из того, что вы могли бы сделать в Java, на сервере _either_, не могло повлиять на это. –

ответ

1

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

Я был бы удивлен, если у вас так много серверов, что вы не можете открыть соединение сокета.

Java - побочный вопрос. Любой сокет или websocket, который вы открыли бы на Java, имеет прямые аналогии на других языках.

+0

Я не уверен, ясно ли я это ясно: там будет много NAT, внутри каждого NAT будет только один сервер, подключающийся к общедоступному серверу. – user6491616

+0

@ user6491616 Это не меняет моего ответа. – mattm