|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
Построить быстрый эхо сервер при приёме и передаче различных по объёму данных от 10 байт до 100 кбайт02.07.2015, 20:57. Показов 2232. Ответов 25
Метки нет (Все метки)
Как построить быстрый эхо сервер.при приёме и передаче различных по объёму данных от 10 байт до 100 кбайт.
0
|
|
| 02.07.2015, 20:57 | |
|
Ответы с готовыми решениями:
25
Обеспечить помехоустойчивость при приеме-передаче данных Прерывание таймером при приёме и передаче данных через UART Шифрование данных при передаче на сервер |
|
Модератор
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
|
||
| 03.07.2015, 09:14 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 03.07.2015, 10:05 [ТС] | |
|
Да это мне понятно, то что вы написали есть в любом примере по построению клиент- сервер, как чистым сервером (то, что Вы описали), так и через различные библиотеки. Самый простой вопрос к Вам как вы определите окончание приема данных, если работать через буфер?
0
|
|
|
Модератор
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
|
||
| 03.07.2015, 10:22 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 03.07.2015, 10:33 [ТС] | |
|
Ну тогда какой размер для recv буфера мне выделять 100 кбайт?
Добавлено через 1 минуту Вы не путайте, с прокси сервером, пакет пришел перенаправил и все.
0
|
|
|
Модератор
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
|
|||
| 03.07.2015, 10:41 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 03.07.2015, 11:18 [ТС] | |
|
я говорю утрировано про прокси. Просто в протоколе TCP реализована разновидность алгоритма квитирования с использованием окна. Поэтому, я думаю, что в момент квитирования, между сервером и клиентом возможно заполнения моего буфера, но тогда встает вопрос, как узнать размер окна.
Добавлено через 3 минуты как вы перешлете 1 байт при передаче 10 байт по симплексному каналу. Добавлено через 19 минут До еще забыл сказать, что максимальный размер сегмента TCP пакета, может быть 64536 байт.) при IPv4.
0
|
|
|
Модератор
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
|
||||
| 03.07.2015, 12:06 | ||||
|
1
|
||||
|
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
|
||
| 03.07.2015, 12:11 | ||
|
0
|
||
|
Модератор
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
|
|
| 03.07.2015, 12:14 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 03.07.2015, 15:54 [ТС] | |
|
Я, когда задавал этот вопрос, подразумевал, что будет предложен эхо сервер на IOCP и все сервера с ним связанные под другие ОС. В связи с чем, изменяю свой вопрос организация эхо сервера на IOCP(ближе к ОС).
Добавлено через 22 минуты т.е. организация такая, как я себе представляю. есть поток Accept,который передает сокет в поток Read который считывает данные до GetQueuedCompletionStatus() и он передает данные в поток Write. Тогда возникает вопрос, нужен mybufer или достаточно readbufer(для случая получения пакета и отправить в очередь на отправку в потоке Write) для передачи данных и опять, как определить оптимальный размер буфера readbufer. Добавлено через 1 час 15 минут В описании TCP протокола сказано "Размер дейтаграммы в байтах с учетом заголовка и данных. Размер поля позволяет использовать дейтаграммы длиной до 65535 байтов, хотя такой размер нежелателен для многих сетей и хостов. Все хосты должны быть готовы к приему дейтаграмм размером до 576 байтов, независимо от того как они доставляются – целиком или фрагментами. Рекомендуется передавать дейтаграммы, размер которых превышает 576 байтов только в тех случаях, когда адресат готов принять такие дейтаграммы." Можно ли считать оптимальным буфером размер в 576 байт.
0
|
|
|
Ушел с форума
|
||
| 03.07.2015, 22:21 | ||
|
Кликните здесь для просмотра всего текста
![]() Вот правильно ведь vxg написал выше: TCP - это поток байт. Никаких там пакетов, дейтаграмм, заголовков и т.п. вы не увидите, как не пытайтесь.
0
|
||
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 04.07.2015, 11:30 [ТС] | |
|
Насчёт дейтограммы -это перевод. А как правильно вы считаете называть окно,сегмент.. . просто у нас принято если дейтограмма то это Udp.
0
|
|
|
Ушел с форума
|
|
| 04.07.2015, 11:48 | |
|
hvt1962, Вы немного не в ту степь ушли. Сегменты, дейтаграммы...
TCP можно рассматривать как некий сервис, который предоставляет следующие интерфейсы: - connect (установка соединения); - shutdown (закрытие соединения); - send (отправка данных); - recv (прием данных) ну еще listen и accept на серверной стороне. Это все. Никаких сегментов, плавающих окон, пакетов и т.п. клиенты этого протокола, т.е. сетевые приложения, работающие с TCP через данные интерфейсы, не видят.
0
|
|
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 04.07.2015, 14:37 [ТС] | |
|
А я туда и не лез, я просто задал вопрос про построение эхо сервера(т.к. он просто сервер который принимает и передает без всяких дальнейших наворотов). А после конкретизировал вопрос о размере recvбуфера(SO_SNDBUF/SO_RCVBUF это управление размером дейтограмм) и необходимости использования myбуфера( если данные которые передаются превышают recvбуфер).
Добавлено через 19 минут Я не правильно выразился SO_SNDBUF/SO_RCVBUF - это не управление размером дейтограмм, а управление приемным/передающим буфером. В некоторых статьях по оптимизации буферов рекомендуют устанавливать приемный буфер 65535 байт, а передающий 576 байт или меньше(тогда начинает работать алгоритм Нейгла). Добавлено через 28 минут Но что делать, когда размер сообщения меньше 576 байт ( вроде задержка Нейгла в windows 20 mсек).
0
|
|
|
Ушел с форума
|
|
| 04.07.2015, 15:58 | |
|
IMHO, при постановке задачи "как построить быстрый эхо сервер, при приёме и передаче
различных по объёму данных от 10 байт до 100 кбайт" все эти заморочки с алгоритмом Нейгла, высчитыванием оптимального размера буфера приема и отправки и т.п. не нужны. Существующие реализации TCP настолько совершенны, что никакой разницы и каких-либо отклонений от нормы вы при этом тюнинге не почувствуете (если вообще не сделаете хуже). Эффективность клиент-серверов достигается за счет грамотного распределения нагрузки и масштабирования, а не установкой флагов или манипуляциями с размерами буферов. Простой асинхронный сервер с пулом потоков, написанный "на коленке" с использованием, к примеру, Boost.Asio, уже будет держать приличную нагрузку и не требовать никакой "подгонки". Уверяю, производительности этой системы для поставленной задачи хватит более чем. Что касается конкретно реализации эхо-сервера на TCP - мне кажется, задача поставлена не совсем точно. TCP сам по себе - это поток байт и без знания того, что находится в этих байтах, вы не можете знать, где кончается один логический кусок данных и начинается следующий (если только не брать в расчет закрытие или разрыв соединения). Это в ICMP, например, размер пинг-пакета заранее известен, а в TCP такого нет. Так что здесь, видимо, читать recv нужно до тех пор, пока не придет 0 (это будет означать закрытие соединения на том конце) и только после этого отправить данные обратно.
0
|
|
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 04.07.2015, 16:55 [ТС] | |
|
Я про нагрузку на сервер не чего не говорил. Меня интересует канал связи.Может перед приёмов данных сделать ping клиента(icmp), а потом на основании этих данных использовать буфер.
0
|
|
|
Модератор
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
|
||
| 06.07.2015, 08:21 | ||
Сообщение было отмечено hvt1962 как решение
РешениеДобавлено через 2 минуты ...то есть по статье - как минимум можно копать в сторону равномерной загрузки машины, снижению количества блокировок и вытеснению кода в драйвер
1
|
||
|
0 / 0 / 0
Регистрация: 30.06.2015
Сообщений: 22
|
|
| 06.07.2015, 09:29 [ТС] | |
|
vxg, спасибо большое. Теперь хоть направление движения определилось. Буду разбираться.
Добавлено через 37 минут Для тех кто интересуется, для чего я задал этот вопрос есть хорошая статья http://habrahabr.ru/company/croc/blog/214693/
0
|
|
| 06.07.2015, 11:38 | |
|
Там вообще ничего не говорится о среде передачи данных. MTU для того же Ethernet 1500, что собственно больше 576 и меньше 65535. Если произойдет какая та блокировка в положение, то на сокете может оказаться значение больше MTU.
0
|
|
| 06.07.2015, 11:38 | |
|
Помогаю со студенческими работами здесь
20
При передаче данных по локальной сети на сервер в базу sql передается только часть данных STM32F429 теряется байт при приеме по USART1
Access97. При передаче или приеме переменных функциями все русские значения отбражаются кракозяблами Комментарии к коду эхо-клиент/эхо-сервер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|