Сетевые сокеты


Сетевые сокеты — способ взаимодействия любого приложения с системой на которой оно работает. Сокет — это интерфейс, который по сути представляет собой совокупность адреса в сети и используемого порта. Также часто термин употребляется применительно к Socket API, о котором рассказывается во второй части материала.



Приложение работает на сервере, подключенном к сети: глобальной или локальной.

Интерфейс между приложением и хост-машиной (Network-Application Interface) определяет как приложение может использовать сеть.


Сетевые сокеты


Сетевые сокеты и клиент серверная модель


Приложение клиента запрос (к MySQL, например) на определенный сетевой адрес и порт. В примере это localhost и порт 3306 — сервер в свою отвечает приложению.

К приложению при этом могут обращаться множество клиентов. Запросы и использованием сокета приходят на один и тот же адрес и обрабатываются одним пакетом. Так работает клиент-серверая модель взаимодействия.



В рамках одной системы часто используются Unix сокеты. Такой способ взаимодействия быстрее.



Один сервис может работать и по Unix сокету и по сетевому сокету в зависимости от настроек.

Примером может быть php-fpm.

Сервис часто запускается на unix сокете и в настройках nginx настраивается проксирование на него. Столь же часто она запускается на адресе 127.0.0.1 и порту 9000 или любом другом.

Подробнее про настройку nginx + php-fpm.



Чтобы написать приложение, которое могло бы обслуживать множество клиентов (последовательно и параллельно) нужно сокет API

Socket API — интерфейс используемый всеми интернет приложениями.

 


Socket API при соединении 2-х приложений может работать с потоками и с датаграммами :


  • потоки — отправка потока байтов с гарантированной доставкой
  • датаграммы — отдельные сообщения без гарантии доставки


Сетевой сокет — комбинация IP адреса и номера порта, которые представляют собой способ адресации.


Адрес и порт обеспечивают нормальное взаимодействие большого количества приложений в рамках одной системы.

Один сокет не может использовать два приложения одновременно или два экземпляра одного приложения.



Вызовы в Socket API


Socket API



SOCKET — вызов создает структуру

BIND — связывает локальный адрес с сокетом

LISTEN — заявляет о готовности установить соединение

ACCEPT — принимает входящее соединение

CONNECT — пробует установить соединение

SEND — отправляет данные в рамках соединения

RECEIVE — принимает информацию в рамках соединения

CLOSE — прерывает соединение



В нагруженных системах иногда применяют socat, инструмент, позволяющий системе работать с сервисом на другом хосте так, как будто он доступен локально.

Сказать спасибо