Как прослушивание сокетов работает

Если клиент слушает сокет на http://socketplaceonnet.com, например, как он узнает, что есть новый контент? Я предполагаю, что сервер не может отправлять данные непосредственно клиенту, так как клиент может находиться за маршрутизатором, без переадресации портов, поэтому соединение с каналом невозможно. Клиентом может быть мобильный телефон, который изменяет его ip-адрес, поэтому я понимаю, что для того, чтобы клиент был слушателем, серверу не нужно знать clint ip.

Спасибо

Ответ 1

Клиентский сокет не прослушивает входящие подключения, он инициирует исходящее соединение с сервером. Серверный сокет прослушивает входящие соединения.

Сервер создает сокет, привязывает сокет к IP-адресу и номеру порта (для TCP и UDP), а затем прослушивает входящие соединения. Когда клиент подключается к серверу, создается новый сокет для связи с клиентом (только TCP). Механизм опроса используется для определения того, произошло ли какое-либо действие в любом из открытых сокетов.

Клиент создает сокет и подключается к удаленному IP-адресу и номеру порта (для TCP и UDP). Можно использовать механизм опроса (select(), poll(), epoll() и т.д.) Для контроля сокета для информации с сервера без блокировки потока.

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