-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
1 | |
Boost Asio - последовательность сообщений для одного и того же TCP Сокета08.02.2025, 15:23. Показов 2640. Ответов 9
Метки нет Все метки)
(
Здравствуйте,
Подскажите пожалуйста, по такому вопросу: -предположим я создал один TCP сокет Boost Asio -установил на нем соединение с удаленным IP -отправил первое сообщение - и не закрывая сокета и соединения сразу же НЕ ДОЖИДАЯСЬ того, что все данные первого сообщения будут отправлены(по крайней мере в условный сетвевой драйвер) - НА ЭТОМ ЖЕ Сокете(на этом же соединении) вызвал async_write/async_write_some для второго сообщения. -Меня интересует гарантия того, что второе сообщение из второго вызова async_write/async_write_some НА ОНОМ И ТОМ ЖЕ сокете Гарантировано будет отправлено только после полной отправки первого сообщения из первого вызова async_write/async_write_some. Это гарантируется или нет ? PS:Мнение LLM`ок разделилось, поэтому я решил еще спросить и Людей ![]()
0
|
08.02.2025, 15:23 | |
Ответы с готовыми решениями:
9
Boost asio повторное открытие сокета
|
Любитель чаепитий
![]() |
|
11.02.2025, 12:27 | 2 |
с точки зрения протокола у пакетов tcp есть sequence number, который позволяет посылать пакеты вне какой-то очереди и потом пересобирать их в нужном порядке на удалённом узле
с точки зрения ОС в этом нет никакого смысла, там, вероятнее всего, очередь данных то есть, с формальной точки зрения это не обязательно с точки зрения практической скорее всего гарантируется
0
|
![]() 596 / 379 / 184
Регистрация: 21.02.2011
Сообщений: 5,130
|
|
11.02.2025, 13:51 | 3 |
Когда вы вызываете async_write или async_write_some, операция асинхронна, и управление возвращается сразу. Однако TCP гарантирует, что данные будут отправлены в порядке их поступления. Ваша программа может инициировать несколько операций записи, но TCP будет обрабатывать их в порядке завершения.
0
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
11.02.2025, 15:15 [ТС] | 4 |
TCP возможно и гарантирует, практика показла, что Boost Asio не гарантирует и нужно делать свой механизм последовтаельности вызова async_write_some, пока редыдущая отправка полностью не завершится.
0
|
![]() 596 / 379 / 184
Регистрация: 21.02.2011
Сообщений: 5,130
|
|
12.02.2025, 13:02 | 5 |
Когда вы вызываете async_write, выполнение не блокируется, и управление возвращается немедленно. Это означает, что если вы вызываете async_write для второго сообщения, прежде чем завершится передача первого, это не приведет к нарушению порядка на уровне TCP.
Один из способов сделать это — использовать обработчики завершения (completion handlers) для отслеживания статуса операций записи.
0
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
12.02.2025, 15:36 [ТС] | 6 |
Как написал выше, на деле - если вы вызовете async_write_some для отправки 1 Гб и сразу же вызовете async_write_some для второго сообщения, то на приемной стороне байты из двух сообщеия придут перемешанные.
Да я уже сделал.
0
|
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
|
|
12.02.2025, 19:28 | 7 |
Дык доки нужно читать, потому что. До TCP тут вообще дело не дошло.
0
|
13.02.2025, 08:16 | 8 | ||||||
0
|
Любитель чаепитий
![]() |
|
14.02.2025, 07:40 | 9 |
то в обработчик придёт результат о том, что в сокет записалось меньше данных, чем 1 Гб, и необходимо повторить операцию для остального буфера
и, естественно, если в очереди есть другой async_write_some, то он выполнится сразу за первым и запишет свои данные (от второго сообщения) тут не логика TCP/IP или Boost.Asio нарушена, а программная логика если нужно, чтобы послался 1 Гб и потом послалось второе сообщение, нужно это логически организовывать например, посылать через async_write, который гарантирует, что все данные из буфера будут посланы
0
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
14.02.2025, 10:20 [ТС] | 10 |
0
|
14.02.2025, 10:20 | |
Помогаю со студенческими работами здесь
10
Является ли boost::asio::tcp::acceptor потоко-безопасным ? boost::asio::ip::tcp::socket::async_connect не вызывает handler
Как узнать число активных соединений в boost::asio::ip::tcp::acceptor ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
|
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
|
Apache Airflow для оркестрации и автоматизации рабочих процессов
Mr. Docker 16.03.2025
Управление сложными рабочими процессами — одна из главных головных болей инженеров данных и DevOps-специалистов. Представьте себе: каждый день нужно запускать десятки скриптов в определенной. . .
|
Оптимизация приложений Java для ARM
Javaican 16.03.2025
ARM-архитектура переживает настоящий бум популярности в технологическом мире. Когда-то воспринимаемая исключительно как решение для мобильных устройств и встраиваемых систем, сегодня она штурмует. . .
|
Управление состоянием в Vue 3 с Pinia и Composition API
Reangularity 16.03.2025
Когда я начал работать с Vue несколько лет назад, мне казалось достаточным использовать простую передачу данных через props и события между компонентами. Однако уже на среднем по сложности проекте. . .
|
Введение в DevSecOps: основные принципы и инструменты
Mr. Docker 16.03.2025
DevSecOps - это подход к разработке программного обеспечения, который объединяет в себе принципы разработки (Dev), безопасности (Sec) и эксплуатации (Ops). Суть подхода заключается в том, чтобы. . .
|
GitHub Actions vs Jenkins: Сравнение инструментов CI/CD
Mr. Docker 16.03.2025
В этой битве за эффективность и скорость выпуска программных продуктов ключевую роль играют специализированные инструменты. Два гиганта в этой области — GitHub Actions и Jenkins — предлагают разные. . .
|
Реактивное программирование с Kafka Stream и Spring WebFlux
Javaican 16.03.2025
Реактивное программирование – это программная парадигма, ориентированная на потоки данных и распространение изменений. Она позволяет выражать статические или динамические потоки данных и. . .
|
Простая нейросеть на КуМир: Учебное пособие по созданию и обучению нейронных сетей
EggHead 16.03.2025
Искусственные нейронные сети — удивительная технология, позволяющая компьютерам имитировать работу человеческого мозга. Если вы хотя бы немного интересуетесь современными технологиями, то наверняка. . .
|
Исполнитель Кузнечик в КуМир: Решение задач
EggHead 16.03.2025
Среди множества исполнителей в системе КуМир особое место занимает Кузнечик — простой, но невероятно полезный виртуальный персонаж, который перемещается по числовой прямой, выполняя ваши команды. На. . .
|