|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||||||||||||||||
Покритикуйте сервер21.09.2011, 23:17. Показов 4177. Ответов 38
Метки нет (Все метки)
Добрый день! Посмотрите и скажите пожалуйста возможные ошибки/недоработки/потенциальные косяки у класса mServer. Особенно интересуют потенциальные косяки при большом количестве подлючений. Надеюсь разобраться будет легко в том, что понаписано - если что пишите, а то сам забываю что, где написано
![]() Server.cpp - main file
mServer.h
mServer.cpp
0
|
||||||||||||||||
| 21.09.2011, 23:17 | |
|
Ответы с готовыми решениями:
38
Ввод/вывод. Покритикуйте код Покритикуйте - ка!:) Покритикуйте |
|
|
|
| 21.09.2011, 23:53 | |
|
ну... даже и не знаю с чего начать... ну во первых - велосипед.
может почитаешь для начала это?: https://www.cyberforum.ru/faq/thread317829.html
1
|
|
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 22.09.2011, 00:19 [ТС] | |
|
Буст да, наверное, поэффективнее написан, чем мой код) Но хотелось бы пока узнать свои заблуждения и ошибки.
0
|
|
|
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
|
||||||
| 22.09.2011, 03:12 | ||||||
http://www.opennet.ru/man.shtm... &russian=2 нить нужно создавать либо уже detached либо использовать pthread_join()/pthread_detach()
1
|
||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||
| 22.09.2011, 09:32 | |||
|
Еще в дополнение сказанного другими участниками не нравиться это:
1
|
|||
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||||
| 22.09.2011, 11:39 [ТС] | ||||
|
0
|
||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||
| 22.09.2011, 11:52 | |||
|
1
|
|||
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 22.09.2011, 11:58 [ТС] | |
|
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 22.09.2011, 12:11 | |
|
Нужно определиться должно это быть строкой или все-таки просто массив байт и работать с ним соответственно. Если вам нужна именно строка, то имеет смысл читать из сокета на байт меньше размера буфера и добавлять \0 к полученным данным.
1
|
|
|
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
|
|||||||||||||||||
| 22.09.2011, 15:49 | |||||||||||||||||
|
Если выдал ошибку-прервать цикл. ошибка accept() будет символизировать о том что сервер надо перезапустить. Добавлено через 12 минут объясню по другому про strlen()
1
|
|||||||||||||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
||
| 22.09.2011, 15:53 | ||
|
Представь себе апач перезапускающийся когда accept() вернет например ECONNABORTED.
0
|
||
|
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
|
|
| 22.09.2011, 15:55 | |
|
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 22.09.2011, 15:59 | |
|
По моему, единственное что там надо сделать, это явно написать while (1) чтоб никого не смущать никогда не меняющимся условием.
0
|
|
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
||
| 23.09.2011, 18:26 [ТС] | ||
|
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 23.09.2011, 19:09 | ||
|
Если рассматривать ваш случай (echo-server), то думаю до 10K клиентов можно спокойно держать в одну нить и до некого числа клиентов будет выигрывать у варианта с нитями. Он и 100К конечно сможет, но латентность будет совсем дикая. Соответственно вариант с пулом нитей (по нитке на ядро cpu) будет эффективней.
1
|
||
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
| 23.09.2011, 19:28 [ТС] | |
|
А латентность в каком смысле? - Клиенты, которые бездействуют или клиент что-то отправил и ждет пока до него срок дойдет?
Вот, если к примеру взять какой-нибудь ирк сервер. Грубо говоря там 5к людей, три четверти висят мертвым грузом, четверть раз в 10 секунд отправляют по 200 байт. Какую структуру выбрать ? 1 нить, 10 нитей, 100 нитей или только опытным путем? Адекватно ли будет, если я на своем компьютере создам сервер и 5к клиентов и буду долбиться всеми клиентами в сервер?
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||||
| 23.09.2011, 19:38 | ||||
|
Up: про структуру. Пишите в одну нить, но так, чтоб легким движением рук превращалось в мульти.
1
|
||||
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
| 24.09.2011, 02:08 | |
|
Вот тут написано, что высокопроизводительные сервера не используют нити :
http://ru.wikipedia.org/wiki/%... 0%B8%D0%B9 Я где-то на сайте nginx видел ссылки на документы, про то, как это всё делается (вроде тут пишут http://www.kegel.com/c10k.html) P.S. Не увидел,что ссылку эту уже дал g_u_e_s_t
1
|
|
|
|
|
| 24.09.2011, 02:29 | |
Сообщение было отмечено как решение
Решение
#pragma, существует еще такое понятие как сопрограммы. конкретно в примерах asio, демонстрируется использование сопрограмм и одного потока для реализации безстекового http-сервера. следует отметить тот факт, что на основе сопрограмм, реализуются микропотоки, кол-во которых может превышать 1000000 без затрат на переключение контекста. в то время как используя потоки, при кол-ве 20000, четырехядерная машина умирает только на переключениях контекста.
от себя скажу, что на основе сопрограмм, реализовывал многопоточную машину состояний способную отслеживать состояние ~300000 объектов, в одном потоке, без расходов холостого хода.
3
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||||
| 24.09.2011, 09:35 | ||||
|
2ТС: посмотрел на IRC, имхо там основная тяжесть не собственно I/O с клиентами, а взаимодействие с другими серверами.
1
|
||||
| 24.09.2011, 09:35 | |
|
Помогаю со студенческими работами здесь
20
Покритикуйте Покритикуйте Покритикуйте код Покритикуйте код Покритикуйте код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|