|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
Правильное выделение памяти31.05.2019, 01:37. Показов 4952. Ответов 70
Метки нет (Все метки)
Как лучше всего выделять память для клиентов на сервере? Клиент отправляет серверу строку в асинхронно режиме которую он (сервер) должен обработать(к примеру клиент посылает серверу сообщения чтобы тот вывел их на экран), так вот появился вопрос если клиентов много то выделять для каждого нового свой буфер для приёму сообщений как мне кажется это не лучшая идея если смотреть со стороны ресурсов, т.к. если к примеру я буду выделять 1024 байт буфера для клиента который отправит только 10 байт то получится пустая трата ресурсов, есть идеи?
0
|
|
| 31.05.2019, 01:37 | |
|
Ответы с готовыми решениями:
70
Правильное выделение памяти объекта ЕГЭ. С4, С2 - обработка массива - правильное выделение памяти
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.05.2019, 16:49 | ||
|
Я работал только с обычными сокетам, знаю (вернее думаю, что знаю), как сделать сервер на большое количество коннектов. Но ни с overlapped, ни с boost::asio работать, к сожалению, не умею.
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 31.05.2019, 17:48 [ТС] | |
|
oleg-m1973, собственно я и сам не много знаю(относительно конечно),но вот до того как Вы написали о подпрограммах завершения я знал очень мало ,а тема то интересная) Чтобы сервер написать на большое кол-во коннектов есть куча методов)
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.05.2019, 17:57 | ||
|
Для этого я получаю размер данных ::ioctlsocket(...FIONREAD...), выделяю буфер (грубо - std::vector<std::byte>), считываю в него данные - recv, и кладу этот буфер в очередь коннекта. В другом потоке я уже беру эти буферы из очереди, распарсиваю, обрабатываю и посылаю ответ, если нужно.
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||
| 31.05.2019, 18:25 [ТС] | ||
|
oleg-m1973, да ,но это синхронный режим,с синхронным режимом проблем бы небыло,а в моем случае режим асинхронный ,тоесть я заранее уже должен указать буфер программы в который придут данные,тоесть размер должен быть указан до получения,одним из решений это просто создать буфер в динамической памяти и сначала обработать первые 4 знака сообщения ,а потом изменить размер буфера и в него вчитывать остальную часть
Добавлено через 2 минуты eva2326, А я вот подумал,если мы будем использовать этот варинат
0
|
||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
||
| 31.05.2019, 18:47 | ||
|
Я вкладываю вот такой: 1. Приложение может заниматься всем, чем захочется. В случае сервера - обычно оно занимается ничего не деланьем, до тех пор, пока какой нибудь клиент не бум-бумкнет. 2. Когда приходят данные, механизм работы с сокетами запускает коллбэк для их обработки. (для примера, см. boost::asio) 3. Обработчик данных извлекает всю посылку. 4. Обработчик данных обрабатывет всю посылку. 5. PROFIT ???!!!! Конечно, получив свои первые 4ре байта размера посылки, вы можете и дальше продолжать асинхронно ждать все остальные недостающие порции данных. Размер то вам уже известен. На мой взгляд это не удобно, и избыточно сложно. Проще залипнуть на чтении всего послания.
0
|
||
|
79 / 60 / 19
Регистрация: 22.11.2015
Сообщений: 193
|
|
| 31.05.2019, 18:47 | |
|
ReYalp,
Смотри, собрал сервер на коленке 1. Тестируем реальную отправку данных с софтфона 2. С помощью эмулятора SIP запросов на соединение отправляем 1 000 запросов с задержкой в 1 мс. 3. Смотрим результат. Если сервер в результате потерял бы хоть один пакет, то данные были бы другие.
0
|
|
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||
| 31.05.2019, 19:07 [ТС] | |||
|
eva2326,
Termit779, я не работал с boos:asio и не знаю как все там устроено и вообще не понимаю что Вы мне пытаетесь показать ,я не спрашивал о получении данных в сетевой буфер. Добавлено через 6 минут
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 31.05.2019, 20:14 | |||
|
Второе - я вроде ничего не говорил тебе о содержимом буфера
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||
| 31.05.2019, 20:30 [ТС] | |||
|
oleg-m1973, так я говоррю что в асинхрронном режиме буфер создается и указывается в методе WSARecv() заранее ,тот буфер в который придут данные и если выделять буфер по факту получения данных и в него их записывать то это уже синхронный режим,разве не так?
Добавлено через 1 минуту Добавлено через 4 минуты
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.05.2019, 20:31 | ||
|
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||
| 31.05.2019, 20:33 [ТС] | ||
|
oleg-m1973,
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 31.05.2019, 20:36 | |||
|
Добавлено через 1 минуту Добавлено через 1 минуту Асинхронно - значит одновременно, в одном потоке так не бывает
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||
| 31.05.2019, 20:42 [ТС] | ||
|
oleg-m1973, могу пример навести ,у нас есть 1000 сокетов подключенных к серверу и для того чтобы от них принять данные асинхронно мы можем создать 1000 буферов(по 1 для каждого) и вызвать для каждого из сокетов WSARecv() ,в данном случае данные придут сразу в эти буферы и Вам не нужно ждать пока они придут чтобы их вычитать или еще что-то,тоесть вы вызываете WSARecv() и этот метод сразу возвращает управление потоку и пока поток делает что либо данные спокойно придут в буфер,вопрос только в том как узнать что они пришли но это уже совсем другая тема
Добавлено через 2 минуты oleg-m1973,
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 31.05.2019, 20:48 | |||
|
- Делается select/poll/epoll для 1000 сокетов - Для 100 сокетов возвращается, что есть данные - Для каждого из этой сотни запускаем в отдельном потоке чтение данных - recv Добавлено через 1 минуту
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||
| 31.05.2019, 20:54 [ТС] | |||
|
oleg-m1973,
Добавлено через 4 минуты
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 31.05.2019, 20:55 | |||
|
Добавлено через 51 секунду
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||||
| 31.05.2019, 21:01 [ТС] | ||||
|
oleg-m1973,
Добавлено через 1 минуту Добавлено через 1 минуту
0
|
||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 31.05.2019, 21:03 | |||
|
Для новичка, проще сделать один поток на коннект. Да, это плохо, но позволит понять, как всё работает и потом перейти на пул потоков Добавлено через 44 секунды
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||
| 31.05.2019, 21:03 [ТС] | ||
|
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 31.05.2019, 21:03 | |
|
0
|
|
| 31.05.2019, 21:03 | |
|
Распределение памяти. Динамическое выделение памяти Выделение памяти, проверка на утечку памяти Правильное освобождение памяти
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Химера правил, администрации порталов, законы и беззаконие.
Hrethgir 26.06.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11904&stc=1&d=1782459438
У меня сейчас так везде по форуму - не могу создавать сообщений, но запись по случаю этому. . .
|
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем
Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026
. . .
|
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки
План доработки модели динамики микоризных симбиозов (EcM с гистерезисом)
Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
|
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
|
|
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
|
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание:
как одно здание порождает конфликты требований,
которые никто не планировал
Материалы для обсуждения с МГСУ · 2026
Рисунки внутри приложенного ворд файла.
Что за. . .
|
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|