Архітектура додатка на базі сокетів

Розроблений додаток має архітектуру типу «клієнт-сервер» на основі сокетного з’єднання.

Клієнт-сервер – це вид розподіленої системи, в якій є сервер, що виконує запити клієнта, причому сервер і клієнт спілкуються між собою з використанням того чи іншого протоколу. В даному випадку використовуються протоколи сокету. Під клієнтом розуміється програма, що використовує ресурси, а під сервером (англійською - слуга) програма, що обслуговує запити клієнICQтів на отримання ресурсів певного виду.

Сокети (англ. socket поглиблення, гніздо, роз'єм) - це назва програмного інтерфейсу для забезпечення інформаційного обміну між процесами. Процеси при такому обміні можуть виконуватися як на одній ЕОМ, так і на різних ЕОМ, пов'язаних між собою мережею. Сокет - абстрактний об'єкт, що представляє кінцеву точку з'єднання.[7]

Сокет – це один кінець двостороннього каналу зв’язку між двома програмами, які працюють в мережі. Реалізація сокетів забезпечує інкапсуляцію протоколів мережевого і транспортного рівнів.

Існують два види сокетів: потокові та дейтаграмні.

Потокові сокети – це сокет з встановленим з’єднанням, який складається з потоку байтів, який може бути двонаправленим, тобто через цю кінцеву точку додаток може і передавати і отримувати дані. Потоковий сокет гарантує виправлення помилок, обробляє доставку і зберігає послідовність даних. Потокові сокети досягають такого рівня якості за рахунок використання протоколу TransmissionControlProtocol (TCP).TCP забезпечує поступлення даних на іншу сторону в потрібній послідовності і без помилок.

Для цього типу сокетів шлях формується до початку передачі повідомлень. Цим гарантується, що дві сторони, які беруть участь у взаємодії, приймають і відповідають. Якщо дані повинні гарантовано доставлятися іншій стороні або вони мають великий розмір і, якщо надійність зв’язку між двома додатками має першочергове значення, то використання саме потокових сокетів є більш прийнятним, ніж дейтаграмних. (Кровчик)

Слід розрізняти клієнтські та серверні сокети. Клієнтські сокети грубо можна порівняти з кінцевими апаратами телефонної мережі, а серверні - з комутаторами. Клієнтський додаток (наприклад, браузер) використовує лише клієнтські сокети, а серверний (наприклад, веб-сервер, якому браузер посилає запити) - як клієнтські, так і серверні сокети.

Кожен процес може створити слухаючий сокет (серверний сокет) і прив'язати його до будь-якого порту комп'ютера. Той хто слухає процес зазвичай знаходиться в циклі очікування, тобто прокидається при появі нового з'єднання. При цьому зберігається можливість просто перевірити наявність з’єднань на даний момент, встановити тайм-аут для операції і так далі.

При створенні сокету, необхідно визначити три параметри: стиль взаємодії, простір імен, і протокол. Стиль взаємодії контролює, як сокет обробляє дані, що передаються, і визначає кількість партнерів взаємодії. Через сокети дані передаються блоками (пакетами). Стиль взаємодії визначає, як ці пакети будуть оброблені і як вони передаються від відправника до одержувача.

Стилі з'єднання гарантують доставку всіх пакетів у тому порядку, в якому вони були відправлені. Якщо під час передачі пакети були втрачені або доставлені в неправильному порядку, одержувач автоматично відправляє запит на їх повторну передачу.

Цикл життя сервера складається зі створення сокету, прив'язки сокету до адреси, виклику listen, що дозволяє з'єднання з сокетом, виклику accept, що приймає вхідні з'єднання, і потім закриття сокета. Дані не читаються і не записуються безпосередньо через сокет сервера, замість цього, кожен раз коли програма приймає нове з'єднання, ОС створює окремий сокет, використовується при передачі даних по цьому з'єднанню. Архітектура з’єднання показана на рис.1.

 

Рис.1. Зображення архітектури «клієнт – сервер» на основі сокетів