Как разрешить серверу уведомлять клиента за брандмауэром - PullRequest
0 голосов
/ 08 января 2010

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

Я знаю, что устройства могут опрашивать сервер для получения обновлений и т. Д., Но 1) будет задержка между тем, когда сервер что-то сделает, и устройством, опрашивающим обновления и 2) будет много бесполезного трафика (со временем) генерироваться.

У кого-нибудь есть предложения, как это сделать? Сначала я хочу, чтобы встроенные устройства использовали UPNP, чтобы попытаться сгенерировать правило переадресации портов в домашнем маршрутизаторе, а затем зарегистрировать этот порт на сервере. Затем сервер может сгенерировать HTTP-запрос на этот адрес (http, чтобы он маршрутизировался и т. Д., Не блокируясь брандмауэрами и т. Д.). Если устройство не может создать правило пересылки, оно возвращается к методу опроса.

Звучит ли это правильно? У кого-нибудь есть опыт, которым они могли бы поделиться с такими вещами? (Клиент будет c ++ на встроенном Linux, сервер .NET).

1 Ответ

0 голосов
/ 08 января 2010

Многое зависит от того, сколько устройств / сетей, по вашему мнению, будет использоваться, и от того, как вы управляете их программным обеспечением / конфигурацией.

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

Кроме того, вы упоминаете переадресацию портов, которая скорее предполагает, что встроенные устройства не будут иметь реальных IP-адресов.

Вы говорите, что хотите использовать HTTP, чтобы избежать его блокировки, однако большинство брандмауэров / маршрутизаторов и т. Д. Не так уж умны - блокировка выполняется исключительно по номерам портов. Если у вас есть несколько устройств за NAT-маршрутизатором, вам придется использовать нестандартные порты для адресации устройств, если вы не реализуете контроллер для ретрансляции запросов на основе содержимого HTTP.

Единственное практическое решение, которое я вижу, это подключение встроенных устройств к серверу и ожидание события.

С

...