usdglander
@usdglander
Yipee-ki-yay

Где почитать про «боевое» использование сокетов?

Добрый день.
Как то тема работы с сокетами обошла меня стороной (ну не попадались задачи в которых на практике можно было бы попробовать работать с ними). Решил восполнить этот пробел в знаниях.
Понятно, что почитал статьи, посмотрел примеры реализации, но всё это на уровне академических примеров "из учебника". Хотелось бы узнать подробнее именно про применение в реальных "боевых действиях".
Для примера: Допустим есть чат (или онлайн игра, или ещё какая то система постоянного обмена информацией между пользователями). Интересно, держит ли каждый сокет постоянный коннект с сервером? Если держит, то как тогда сервер не ложиться от 5-10 тыс онлайна? А если не держит, то как клиенты определяют что пришло сообщение в чат и что надо его получить и отобразить?
Или, например, какие есть подводные камни с буферами. Если у меня ограничен размер буфера для приёма сообщения и кто то отправляет сообщение длиннее, то что происходит с отрезанными данными на приёмной стороне? И как лучше обрабатывать подобные ситуации?
В общем дайте что почитать по подобным темам, пожалуйста. (Ну или хотя бы на эти два вопроса ответьте :))
Заранее спасибо всем ответившим.
  • Вопрос задан
  • 1174 просмотра
Решения вопроса 3
gbg
@gbg Куратор тега Компьютерные сети
Любые ответы на любые вопросы
Йон Снейдер - эффективное использование TCP/IP
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Еще в 2012 году парни выжимали 1 млн соединений с 1 физического сервера: https://habrahabr.ru/post/123154/
Даже если снизить накал на порядок и предположить что у них и нагрузка была в плане количества сообщений ничтожной - все равно получается 100 000 соединений с сервера, а это больше чем средний онлайн ААА игры.

Поверьте, все эти истории с играми упираются не в количество сокетов, а в производительность игровой математики, которая обрабатывает каждое действие всех пользователей.

"Pubg держит 3 млн игроков" - забавно). Pubg держит 100 игроков в одной сессии и это хороший результат.
WoT держит 20 игроков в одной сессии.
EVE в самой большой битве было ~7500 человек, и они вводили своё фирменное замедление времени - сервер обслуживающий локацию не успевал обсчитывать математику.

А вообще, все проекты обслуживающие большое количество людей строятся изначально исходя из возможности горизонтального масштабирования. В этом смысле сессионки вообще шикарны, изолированная на долгое время группа людей, какие-то связи за пределы группы отсутствуют, никакие серьезные потоки данных из сессии перебрасывать не нужно, целостность данных тоже пофиг по большому счету - идеальная история.
Ответ написан
Stalker_RED
@Stalker_RED
Если держит, то как тогда сервер не ложиться от 5-10 тыс онлайна?
А много вы назовете игр, которые держат такой онлайн? Подсказка: wow держит в разы меньше, например.

Я вот сходу только EVE-Online припоминаю, они держат десятки тысяч. Но там специальный логин-сервер, который держит соединения, а за ним уже кластер обрабатывающий собственно игру.

А вообще, сами по себе сокеты не особо требовательны, и можно их сотнями тысяч поднимать. Хватало бы памяти и прочих ресурсов.
https://blog.jayway.com/2015/04/13/600k-concurrent...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы