-
Notifications
You must be signed in to change notification settings - Fork 2
Async.Networking.RU
Anton Kashcheev edited this page Dec 2, 2024
·
11 revisions
Библиотечные примитивы:
-
flame_ide::os::async::network::Registrar
(header) - регистратор событий от сокетов; асинхронно от зарегистированных сокетов получает события и кладёт их в соответствующую очередь. -
flame_ide::os::network::UdpServer
(header) - реализация синхронного UDP-сервера. -
flame_ide::os::network::UdpClient
(header) - реализация синхронного UDP-клиента. -
flame_ide::os::network::TcpServer
(header) - реализация синхронного TCP-сервера. -
flame_ide::os::network::TcpClient
(header) - реализация синхронного TCP-клиента.
Примитивы в обработчике:
ServerHandle
SessionHandle
-
Internal
- PImpl, содержит хранилище сокетов, потоки-воркеры и регистратор сокетов Notificator
Worker
Workers
udp::Storage
tcp::Storage
TODO: список чуть больше, @kachsheev дозаполнит
Handler под капотом реализует многопоточную обработку очередей сокетов:
- Выдаёт клиентам свои высокоуровневые обёртки вокруг сокетов
- Подписывается на уведомления от Registrar
- По уведомлению либо вычитывает данные, либо пишет
-
Регистратор ⟶ Объект-уведомитель ⟶ Поток-обработчик ⟶ Очередь с данными
-
Регистратор:
- Получает событие по конкретному сокету
- Записывает в очередь на обработку пару из id сокета и его событие
- Через объект-уведомитель сообщает о новом входящем событии
-
Объект-уведомитель:
- Через триггер отправляет уведомление о новом входящем событии потоку-обработчику
-
Поток обработчик:
- Через триггер получает уведомление о новом входящем событии
- Вычитывает из очереди регистратора пару (id сокета и событитие)
- Выполняет некоторые действия с сокетом
- Если событие связано с новыми данными, то из сокета производится чтение в очередь с данными
- Засыпает до следующего события, если новых нет
-
Регистратор:
-
Объект-обёртка ⟶ Очередь с данными ⟶ Объект-уведомитель ⟶ Поток-обработчик
-
Объект-обёртка:
- Копирует данные копируются в очередь
- Через объект-уведомитель сообщает о данных на отправку
-
Объект-уведомитель:
- Через триггер отправляет уведомление об исходящих данных потоку-обработчику
-
Поток-обработчик:
- Через триггер получает уведомление о исходящих данных по заданному сокету
- Пишет из очереди данные в сокет
- Засыпает до следующего события, если новых нет
-
Объект-обёртка: