Сетевое программирование и мульти сокет - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть идея разработать игровой сервер (не сервер mmo, а сервер, который может обрабатывать множество игровых экземпляров, например, множество шахматных партий одновременно)

Я догадывался, что было бы интересно управлять (для сервера) перераспределением клиента во многих сокетах одновременно. Так есть ли интерес к этому?

Например:

5 игровых экземпляров на порту 1234
5 игровых экземпляров на порт 1235
и т.д ...

Я думал о брандмауэре. Брандмауэр будет выполнять свою работу быстрее на огромном трафике на том же порту, или он может быстрее обрабатывать небольшой трафик на многих портах? и так далее, можно ли изменить это поведение на другом брандмауэре? (iptables, другие?)

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

Как вы думаете, многопортовая сеть может дать лучшую задержку для клиента?

Повышение безопасности? если проблема, а не та, которая может дать root-доступ, заключается в том, что find на сервере хакер может обмануть лишь несколькими людьми, потому что трафик перекрывается во многих других сокетах?

Как вы думаете, это может принести что-то, чего я не думаю (конечно, не сложность программирования)?

Спасибо за ваш ответ.

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

Разделение трафика не обязательно улучшает производительность обработки сети.То, что вы выделяете больше сетевых ресурсов, не означает, что это улучшит общую производительность, потому что вы, скорее всего, столкнетесь с проблемой узкого места.У вас может быть несколько портов, но при этом у вас могут возникнуть проблемы с производительностью, если вы используете только один поток, и наоборот, у вас есть один порт, и у вас действительно хорошая проверенная производительность, если вы используете несколько потоков (например, пул потоков) для этого сокета (используя epoll, Kqueue, IOCP и т. д.).Все зависит от того, сколько ресурсов вы выделите в целом .Я настоятельно рекомендую вам использовать асинхронный сокет для вашего сервера, epoll и kqueue для unix (epoll для linux, kqueue для freeBSD) или IOCP для Windows.У них лучший период исполнения.

1 голос
/ 15 ноября 2011

Мне кажется, что использование выделенного порта для каждой игры замедлит работу сервера.Лучше иметь один порт и обозначать игру по протоколу прикладного уровня.

Он также ограничивает вас играми до 64K и может вызвать проблемы с повторным использованием адресов.С другой стороны, я тоже не вижу, что это дает;честно говоря, это выглядит как ненужная сложность.

Я являюсь автором hellepoll , поэтому мое внутреннее чувство считается, но не авторитетным.

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

0 голосов
/ 15 ноября 2011

В чем именно вопрос?

Вам потребуется системный вызов сокета мультиплексирования, например poll (или ppoll или pselect) в Linux.

Ваша проблема может быть связана с проблемой C10k

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...