|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
Правильное выделение памяти31.05.2019, 01:37. Показов 5348. Ответов 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 | |
|
Распределение памяти. Динамическое выделение памяти Выделение памяти, проверка на утечку памяти Правильное освобождение памяти
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|