2017-02-21 4 views
1

Я уже знаю о веб-сокетах, и они замечательные, проблема заключается в том, что они должны поддерживать открытое соединение, чтобы иметь возможность общаться.Запросы от сервера к клиенту

У меня есть небольшая система, в которой время от времени сервер должен обновлять статус и уведомлять клиентов об этом, а поддержание открытого соединения с каждым клиентом не так оптимально. В то же время очень важно, чтобы обновление на стороне клиента было сделано как раз вовремя.

Итак, мой вопрос: если у сервера есть уникальный адрес, у клиента есть общедоступный временный адрес, где сервер может отправить запрос? Поэтому, когда клиент подключится к серверу, он предоставит уникальный адрес и сервер будет кэшировать его, а когда будет обновление, сервер отправит запрос на этот адрес?

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

ответ

1

Если клиент не имеет выделенного IP-адреса, он недоступен из WAN, если он не имеет открытого соединения с любым узлом в нем.

Когда клиент из локальной сети отправляет запрос на сервер, он (клиентский) маршрутизатор запоминает локальный IP-адрес и порт клиента и переводит его с использованием протокола NAT на один из бесплатных портов маршрутизатора, а затем отправляет данные дальше с собственным IP-адресом маршрутизатора, адрес отправителя »в заголовке протокола IP и« Порт отправителя »в заголовке TCP. При ответе сервера маршрутизатора он использует таблицу NAT из своей памяти для перевода адресов обратно и доставки данных клиенту. Адреса обычно хранятся в таблице NAT при открытии соединения между сервером и клиентом. Поэтому, если нет открытых соединений между сервером и клиентом локальной сети, сервер не сможет подключиться к клиенту, потому что сервер не знает, как его достичь.

Вы говорите, что у вас небольшая система. Почему же вы думаете, что у вас не будет достаточно свободного порта на вашем сервере для работы с веб-сайтами? Если вы просто хотите получать обновления с сервера (а не для отправки и получения данных через постоянно открытое соединение), вы, вероятно, найдете более длинный опрос или SSE. Это определенно проще реализовать, чем websockets.

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