PHP: Програмування сокетів

17.07.2015

PHP: Програмування сокетів

Сторінка 1 з 4

Сокети являють собою надзвичайно зручну, але в той же час погано зрозуміла технологію взаємодії між двома процесами в мережі. Ці процеси можуть існувати на одній і тій же машині, спілкуючись один з одним через локальний сокет, призначений для взаємодії між процесами, або на різних машинах через Internet. Хоча тема сокетів дуже обширна, у даній статті представлені основи, які необхідні для використання розширень РНР, призначених для написання власних серверів і клієнтів сокетів.

Для використання сокетів РНР повинен бути скомпільовано з опцією ./configure -enable-sockets чи потрібно завантажувати розширення підтримки сокетів динамічно.

Майте на увазі, що приклади, наведені далі в цій статті, розроблені для запуску безпосередньо з оточення оболонки з використанням версії РНР командного рядка. Хоча їх можна запустити в Web-браузері, робити це не рекомендується. У разі сценаріїв, які створюють сервери сокетів, їх застосування можна продемонструвати за допомогою будь-яких програм, здатних встановлювати з’єднання через сокети, наприклад, telnet (що, власне, і рекомендується).

Основи сокетів

Хоча існує безліч типів сокетів, всі функції сокетів засновані на одному і тому ж базовому принципі — отримання даних програмою від програми А. Ці програми можуть працювати на одній і тій же машині з застосуванням межпроцессного взаємодії (Interprocess Communication — IPC), або на віддалених машинах (таких як Web-сервер та броузер).

Сокети можуть бути надійними, виконують все необхідне для забезпечення передачі даних з точки А в точку В (TCP). або ненадійними, коли дані передаються без гарантії доставки (UDP) .

Сокети також бувають «блокуючими» і «неблокирующими». Блокуючі сокети змушують ваше додаток чекати до тих пір, поки дані стануть доступні, в той час як неблокирующие сокети цього не роблять. Хоча, як буде показано далі, все сокети двосторонні, все ж існує різниця між сокетами клієнта і сервера.

Ми з вами розглянемо ТСР-сокети Internet, оскільки вони найбільш широко використовуються на сьогоднішній день. Тим не менш, концепції та приклади коду, наведені тут, застосовні до більшості операцій з сокетами.

Створення нового сокету

Незалежно від типу створюваного сокета (клієнтський або серверна), всі вони ініціалізуються однаковим способом — за допомогою функції socket_create(). Синтаксис цієї функції виглядає наступним чином:

socket_create($domain, $type, $protocol);

Параметри:

$domain — тип сокета і повинен приймати одне із значень, перерахованих в таблиці констант доменів для сокеткых з’єднань

$type — тип взаємодії, яка буде здійснюватися через сокет; допустимі значення наведені в таблиці констант типів сокетів

$protocol — протокол, використовуваний даними сокетом. Цей параметр може бути довільним допустимим номером протоколу (див. функцію getprotobyname() ) або константою SOL_UDP або SOL_TCP для з’єднань TCP/UDP.

В результаті виконання ця функція або повертає ресурс, що представляє створений сокет, або булевское значення false в разі помилки.

Функція socket_create() — це перший виклик при будь-якій взаємодії сокетів. який ініціалізує ресурс сокета, який використовується в подальших операціях. Отже, сокети можуть використовуватися як локально — для IPC, так і віддалено — в стилі клієнт/сервер. Контекст конкретного застосування сокета називається доменом. Доступні в РНР домени, передаються функції socket_create() в параметрі $domain, задаються константами таблиці:

Константи доменів для сокеткых з’єднань

Короткий опис статті: php програмування Сокетів являють собою надзвичайно зручну, але в той же час погано зрозуміла технологію взаємодії між двома процесами в мережі. Хоча тема сокетів дуже обширна, у даній статті представлені основи, які необхідні для використання розширень РНР, призначених для написання власних серверів і клієнтів сокетів. сокет-сервер, php сокети, socket

Джерело: PHP: Програмування сокетів

Також ви можете прочитати