Подскажите пожалуйста, есть ли сабж (для любых ОС)?
Может ли 1 сервак держать, скажем... 50к TCP клиентов? Разумеется рассматриваю случай, когда остальных ресурсов достаточно.
Помню был какой-то прикол с 64 клиентами...
Лимит есть. Для разных систем (по умолчанию) он разный. И в большей части систем его можно менять, при необходимости. Во многих системах ограничение на кол-во дискрипторов, а это открытые файлы(потоки?) + сокеты.
З.Ы. Нафиг оно тебе?
Сильно подозреваю, что ресурсы на обработку подключений закончатся быстрее, чем наступит лимит этих самых подключений )).
Но если интересуют абстрактные цифры, то, найди книжку "Network Programming For Microsoft Windows", там были некоторые тесты лимита соединений. Правда там это было с позиции используемой I/O модели, только под Вин, да и книжка староватая, но всё же.
MarkoPolo
> Помню был какой-то прикол с 64 клиентами
это для функций типа WaitForMultipleObjects
Tilk
больше 1000 соединений будут держать только серверные версии...
используй UDP, там один сокет держит всех клиентов, поэтому ограничения будут только в твоем коде...
В несерверной винде лимиты самые разные в зависимости от версии, я видел до 256 подключений.
В серверной счёт на тысячи но где-то есть лимит, и от этого тоже зависит цена винды.
То ли в twisted (библиотечка для Python), то ли в medusa где-то валялся в примерах питон скриптик, создающий 100500 сокетов, и пишущий сколько создать удалось до наступления ошибки. Это и есть примерная оценка лимита подключений.
В линухе по умолчанию у нерута порядка 1024, можно просмотреть через ulimit -a, но и можно повышать через ulimit -n XXXX
Для высоконагруженных приложений использование UDP экономит память и CPU ;) поскольку подключения не создаются, то и лимита нету.
Pushkoff
> WaitForMultipleObjects
А ну да.
slava_mib
>З.Ы. Нафиг оно тебе?
Меня заинтересовал вопрос - можно ли для мморпг обойтись одним физическим сервером, до безумия вкачивая ему ресурсы. Есть ли такая ОС, которая не имеет лимита на коннекты?
Кстати, а что из себя представляют компьютеры-серверы? Просто монстр у которого намного больше слотов под оперативку и особо крутой процессор?
>Есть ли такая ОС, которая не имеет лимита на коннекты?
Задайся вопросом а есть ли у тебя такая мморпг, в которой будет сидеть столько пользователей )))
>Кстати, а что из себя представляют компьютеры-серверы? Просто монстр у которого намного больше слотов под оперативку и особо крутой процессор?
Это обычный комп, но ориентированный на то, что бы переваривать большие нагрузки: более мощные процы, немного изменённая архитектура, больше памяти, быстрее диски, надёжное хранилище информации, резервное питание и т.д. и т.п.
процЫ? процессоров тоже можно много навтыкать? Это что же за материнки такие?
Tilk
> процЫ? процессоров тоже можно много навтыкать? Это что же за материнки такие?
ОХ... ЩИ... >_<
вообще странно что топикстартер берется за мифическую мморпг с 50к TCP соединений при этом даже не особо представляя чем конфигурация сервера отличается от среднестатистического компа.
(я конечно могу ошибаться, но мое мнение что если сервер на одном физическом компе то упрется все далеко не в количество соединений)
Компы разные бывают... бывает например мейн-фреймы, там и процы тысячами считаються. Так что тут вопрос поставлен некорректо. Комп можно построить и такой, чтобы шло на одном (под одним компом подразумевается общее адресное пространство всех модулей памяти, только вот памтяь будет NUMA причём не сс- почти 100%). Вопрос в другом, необходимо ли тебе изгежать задержек даваимых кластерной архитектурой или и с ними жить можно?
slava_mib
> Задайся вопросом а есть ли у тебя такая мморпг, в которой будет сидеть столько пользователей )))
+1
Я нигде не писал что берусь за такую мморпг. У меня все гораздо скромнее. Вопрос возник по другой причине.
Вот смотрите, есть у нас сервер с типичным делением игроков между серверами по территориальному принципу. Очевидно, что если 1 сервер не способен держать весь онлайн, то некое глобальное игровое событие, когда все игроки хлынут в одно место просто положит сервер.
Как этого избежать?
Perfect World (и наверное далеко не только они) решили эту проблему достаточно банально. Они просто открывают новые "чистые" сервера, куда идут вновь зарегистрированные пользователи. А на перегруженный сервер людей просто не пускает. В итоге народ достает логиниться по 20 минут в день и они сваливают на другие, более свободные сервера.
Решение конечно действенное, но по мне так - не особо красивое. Можно ли еще как-либо избежать проблемы сверхнагрузки на сервер во время каких-либо массовых событий?
Мне на ум только два решения пришли
1) отойти от территориального принципа и делить игроков между серверами просто исходя из нагрузки. Но тогда рядом на локациях будет стоят народ, обслуживаемый разными серверами. Понадобится локальная сеть между серверами... да и вообще это как ересь звучит))
2) убер-компьютер с резиновыми ресурсами.
И вот тут возник вопрос про лимит коннектов.
Просьба не троллить на тему создателей мморпг. Разгромные статьи читал, выводы сделал. По сабжу - ну интересно просто)
Тема в архиве.