-
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-клиента.
Примитивы в обработчике:
-
Internal
- PImpl, содержит хранилище сокетов, потоки-воркеры и регистратор сокетов Worker
udp::Storage
tcp::Storage
Handler под капотом реализует многопоточную обработку очередей сокетов:
- Выдаёт клиентам свои высокоуровневые обёртки вокруг сокетов
- Подписывается на уведомления от Registrar
- По уведомлению либо вычитывает данные, либо пишет
-
Регистратор --> Объект-уведомитель --> Поток-обработчик --> Очередь с данными
-
Регистратор:
- Получает событие по конкретному сокету
- Записывает в очередь на обработку пару из id сокета и его событие
- Через объект-уведомитель сообщает о новом входящем событии
-
Объект-уведомитель:
- Через триггер отправляет уведомление о новом входящем событии потоку-обработчику
-
Поток обработчик:
- Через триггер получает уведомление о новом входящем событии
- Вычитывает из очереди регистратора пару (id сокета и событитие)
- Выполняет некоторые действия с сокетом
- Если событие связано с новыми данными, то из сокета производится чтение в очередь с данными
- Засыпает до следующего события, если новых нет
-
Регистратор:
- Объект-обёртка --> Очередь с данными --> Объект-уведомитель --> Поток-обработчик