Сокет/веб-сокет (socket/websocket)
Со́кет (англ. socket – роз'єм) – назва програмного інтерфейсу для забезпечення обміну даними між процесами. Процеси при такому обміні можуть виконуватися як на одній ЕОМ, так і різних ЕОМ, пов'язаних між собою мережею. Сокет - абстрактний об'єкт, що представляє кінцеву точку з'єднання.
Слід розрізняти клієнтські та серверні сокети. Клієнтські сокети грубо можна порівняти з кінцевими апаратами телефонної мережі, а серверні – з комутаторами. Клієнтська програма (наприклад, браузер) використовує лише клієнтські сокети, а серверна (наприклад, веб-сервер, якому браузер надсилає запити) - як клієнтські, так і серверні сокети.
Принципи сокетів
Для взаємодії між машинами за допомогою стека протоколів TCP/IP використовуються адреси та порти. Адреса є 32-бітною структурою для протоколу IPv4, 128-бітною для IPv6. Номер порту – ціле число в діапазоні від 0 до 65535 (для протоколу TCP).
Ця пара визначає сокет («гніздо», що відповідає адресі та порту).
У процесі обміну, як правило, використовується два сокети - сокет відправника та сокет одержувача. Наприклад, при зверненні до сервера на HTTP-порт сокет буде виглядати так: 194.106.118.30:80, а відповідь надходитиме на mmm.nnn.ppp.qqq:xxxxx.
Кожен процес може створити "слухає" сокет (серверний сокет) і прив'язати його до якого-небудь порту операційної системи (у UNIX непривілейовані процеси не можуть використовувати порти менше 1024).
Слухаючий процес зазвичай перебуває в циклі очікування, тобто прокидається з появою нового з'єднання. При цьому зберігається можливість перевірити наявність з'єднань на даний момент, встановити тайм-аут для операції тощо.
Кожен сокет має свою адресу. ОС сімейства UNIX можуть підтримувати багато типів адрес, але обов'язковими є INET-адреса та UNIX-адреса. Якщо прив'язати сокет до UNIX-адреси, то буде створено спеціальний файл (файл сокета) заданим шляхом, через який зможуть повідомлятися будь-які локальні процеси шляхом читання/запису з нього (див. сокет домену Unix). Сокети типу INET доступні з мережі та вимагають виділення номера порту.
Зазвичай клієнт явно «під'єднується» до слухача, після чого будь-яке читання чи запис через його файловий дескриптор передаватиме дані між ним та сервером.
WebSocket
WebSocket – протокол зв'язку поверх TCP-з'єднання, призначений для обміну повідомленнями між браузером та веб-сервером у режимі реального часу.
В даний час у W3C здійснюється стандартизація API Web Sockets. Чорновий варіант стандарту цього протоколу затверджено IETF.
WebSocket розроблений для втілення у веб-браузерах та веб-серверах, але він може бути використаний для будь-якої клієнтської або серверної програми. Протокол WebSocket - це незалежний протокол, що базується на протоколі TCP. Він уможливлює більш тісну взаємодію між браузером та веб-сайтом, сприяючи поширенню інтерактивного вмісту та створенню додатків реального часу.
Різниця Socket та WebSocket
Socket та WebSocket - це різні поняття в принципі. Під час роботи з протоколом WebSocket ви будете використовувати звичайні сокети для з'єднання. Так само як і при роботі з іншими протоколами буде використано сокет (і для роботи з http, з ftp та ін).
Наприклад, розглянемо рядок виду – ws://127.0.0.1:15000. У ній ws - це вказівка те що, що з обміні даними буде використано протокол WebSocket. 127.0.0.1 – ip адреса комп'ютера, 15000 – порт, на який здійснюється підключення. Так ось 127.0.0.1:15000 - ця пара, якщо можна так висловитись, і є сокетом.
Протокол WebSocket створювався для того, щоб можна було підтримувати тривалі нерозривні з'єднання між браузером (який є клієнтом) та веб-сайтом (який є сервером).
Протокол WebSocket не нагадує HTTP. Єдине, чим він нагадує HTTP - лише одним першим запитом на підключення (так званим рукостисканням/handshake). Це було зроблено, тому що спочатку протокол розрахований на роботу в браузері і необхідно було визначити можливість його підтримки. Після того, як з'єднання встановлено, нічого схожого на протокол HTTP у WebSocket навіть близько немає. Саме відсутність будь-яких наворотів у протоколі WebSocket і дає можливість швидкої роботи.
Різниця WebSocket та Socket.IO
Говорячи про веб-сокети, ми маємо на увазі протокол веб-комунікації, що представляє повнодуплексний канал комунікації поверх простого TCP-з'єднання. Простіше кажучи, ця технологія дозволяє встановити зв'язок між клієнтом та сервером з мінімальними витратами, дозволяючи створювати програми, що використовують усі переваги живого спілкування. Наприклад, уявіть, що ви створюєте чат: вам необхідно отримувати та відправляти дані якнайшвидше, вірно? З цим чудово справляються веб-сокети! Ви можете відкрити TCP-з'єднання і тримати його відкритим скільки потрібно. Веб-сокети використовуються в таких випадках:
Чати;
Розраховані на багато користувачів ігри;
Спільне редагування;
Соціальні (новинні) стрічки;
Програми, що працюють на основі розташування.
Socket.IO - бібліотека JavaScript, заснована (написана поверх) на веб-сокетах та інших технологіях. Вона використовує веб-сокети, коли вони доступні, або такі технології, як Flash Socket, AJAX Long Polling, AJAX Multipart Stream, коли веб-сокети недоступні.
AJAX
Ajax (Asynchronous Javascript and XML - «асинхронний JavaScript і XML») - підхід до побудови інтерактивних інтерфейсів користувача веб-додатків, що полягає в «фоновому» обміні даними браузера з веб-сервером. В результаті, при оновленні даних веб-сторінка не перезавантажується повністю, і веб-програми стають швидше і зручніше. Російською іноді вимовляється транслітом як «аякс». Абревіатура AJAX не має усталеного аналога на кирилиці.
У класичній моделі веб-додатки:
Користувач заходить на веб-сторінку і натискає на якийсь її елемент;
Браузер формує та надсилає запит серверу;
У відповідь сервер генерує зовсім нову веб-сторінку і відправляє її браузеру і т.д., після чого браузер повністю перезавантажує всю сторінку.
При використанні AJAX:
Користувач заходить на веб-сторінку і натискає на якийсь її елемент;
JavaScript визначає, яка інформація потрібна для оновлення сторінки;
Браузер надсилає відповідний запит на сервер;
Сервер повертає лише ту частину документа, на яку надійшов запит;
Скрипт вносить зміни з урахуванням отриманої інформації (без перезавантаження сторінки).
Джерела:
Дод. матеріал:
Last updated