or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
2025: Комп'ютерні системи і мережі. 4. Протокол управління передачею TCP. Протокол WebSocket. Бібліотека Socket.IO
Протокол управління передачею (TCP, Transmission Control Protocol)
Це один з основних протоколів передачі даних інтернету. Призначений для керування передачею даних Інтернету. Пакети TCP називаються сегментами.
У стеку протоколів TCP/IP виконує функції транспортного рівня моделі OSI.
(См.таблицу)
Механізм TCP надає потік даних із попередньою установкою з'єднання,

здійснює повторний запит даних у разі втрати даних і усуває дублювання при отриманні двох копій одного пакета, гарантуючи тим самим (на відміну від UDP) цілісність даних, що передаються, і повідомлення відправника про результати передачі.
Реалізації TCP зазвичай вбудовані в ядра ОС. Існують реалізації TCP, що працюють у просторі користувача.
Коли передача здійснюється від комп'ютера до комп'ютера через інтернет, TCP працює на верхньому рівні між двома кінцевими системами, наприклад, браузером і веб-сервером. TCP здійснює надійну передачу потоку байтів від одного процесу до іншого. У цьому випадку TCP здійснює управління передачею даних.
Протокол WebSocket
WebSocket - це високорівневий інтернет-протокол передачі повідомлень (даних) по двонаправленим (повнодуплексним) комунікаційним каналам, що використовують TCP з'єднання. Протокол WebSocket був стандартизований комітетом IETF як RFC 6455 у 2011 році. WebSocket додає мінімальний функціонал поверх TCP:
Ініціація з'єднання WebSocket (Protocol handshake)
Ініціація з'єднання стартує зі спеціального клієнтського HTTP-запиту та серверної відповіді. Такий підхід дозволяє серверам працювати як з HTTP-, так і WebSocket-з'єднаннями на тому самому порту.Приклад HTTP-фази ініціалізації протоколу WebSocket
Приклад клієнтського HTTP запиту на встановлення WebSocket з'єднання
(так само, як і для чистого HTTP, кожен рядок повинен завершуватися парою байт \r\n і в кінці запиту має бути порожній рядок):
Відповідь сервера:
Як тільки з'єднання встановлено, комунікація та передача даних переключаться на двонаправлений бінарно-текстовий протокол, який вже ніяк не пов'язаний з протоколом HTTP.
Мал. Порівняння діаграм обміну повідомленнями для протоколів HTTP, SSE и WebSocket
Приклад клієнтського коду WebSocket
Приклад тестової реалізації роботи WebSocket
Код серверної частини з цього прикладу:
Фрагмент коду - обробник отриманих повідомлень, який визначає тип отриманих даних по протоколу WebSocket:
Фрагмент коду, що задає та контролює тип бінарних даних:
Фрагмент коду, що виконує жорсткий контроль буфера даних, що надсилаються, перед відправкою нових даних:
Посилання на реалізацію інтернет онлайн гри, що використовує протокол WebSocket:
https://glitch.com/edit/#!/volkov-game?path=server.js%3A1%3A31
Введення в бібліотеку Socket.IO
Бібліотека Socket.IO - це клієнтське та серверне API, що інкапсулює функціонал та можливості протоколу WebSocket і безшовне переключення на протокол XHR у разі неможливості роботи з WebSocket.
Подібно до node.js, Socket.IO подієво-орієнтована бібліотека.
Надсилання та отримання повідомлень на клієнті та на сервері
Приклад серверного коду, який використовує socket.IO
Приклад клієнтського коду (браузерного) socket.IO
Фрагменти, що ілюструють найпростіші можливості socket.IO API
Повідомлення з одним параметром
Передача із клієнта на сервер повідомлення з одним параметром:
Передача із сервера клієнтам повідомлення з одним параметром:
Прийом повідомлення з одним параметром (на клієнті чи сервері):
Повідомлення з множиною параметрів
Передача повідомлення з множиною параметрів:
Прийом повідомлення з множиною параметрів:
Порівняння WebSocket та Socket.IO
Переваги Socket.IO
На відміну від веб-сокетів, Socket.IO дозволяє надсилати повідомлення всім підключеним клієнтам. Наприклад, ви пишете чат і хочете повідомляти всіх користувачів про підключення нового користувача. Ви легко можете реалізувати це за допомогою однієї операції. При використанні веб-сокетів, для реалізації подібного завдання вам знадобиться список підключених клієнтів та надсилання повідомлень по одному.
У веб-сокетах складно використовувати проксування та балансувальники навантаження. Socket.IO підтримує проксі та балансування з коробки.
Socket.IO підтримує поступову (витончену) деградацію роботи каналів при неконтрольованих змінах стану мережі.
Socket.IO підтримує автоматичне перепідключення при розриві з'єднання.
Бібліотека Socket.IO дозволяє писати коротший код.
Переваги WebSocket
WebSocket є стандартним сучасним протоколом інтернет та його API підтримується всіма сучасними браузерами.
Коротший мережевий трафік у фазі встановлення з'єднання.
Веб-сокети надсилають лише два запити:
Це дозволяє встановити з'єднання із сервером.
Socket.IO у фазі встановлення з'єднання відправляє:
Завдання на лабораторну роботу №4
Виконати завдання лабораторної роботи 3, використовуючи методи протоколу WebSocket
Ресурси