|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
Правильное выделение памяти31.05.2019, 01:37. Показов 5052. Ответов 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 | |
|
Распределение памяти. Динамическое выделение памяти Выделение памяти, проверка на утечку памяти Правильное освобождение памяти
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|