это то, через что я проходил несколько раз, и после небольшого перерыва я возвращаюсь с приложением для клиента, но просто хочу запомнить несколько вещей, прежде чем я действительно что-то реализую.
Я буду говорить о мульти-клиентском сервере, который имеет дело с клиентами, подключающимися через TCP к порту, привязанному к серверу.
Я помню, как кодировал это с помощью select (), FD_ISSET, FD_ZERO, FD_SET - и это семейные методы для приема и управления списком подключенных клиентов на моем сервере - и я помню, что это работало замечательно, но на этот разречь идет о простой RPG-игре для 32 игроков - так что ничего быстрого не происходит, поэтому TCP здесь.
Простые пакеты GO_TO, изменение ПОГОДЫ, обновления ВРЕМЕНИ, сообщения ТЕКСТА, ИЗМЕНЕНИЯ СОСТОЯНИЯ И ВЫХОДА ИЗ ПУНКТА, ВХОДЫ (трансляции)и что-то еще, что я не могу сейчас выяснить.
Что мешает мне сегодня спать, так это то, что я действительно должен выбрать, чтобы этот сервер работал бесперебойно (если говорить о его производительности сети).
Люди часто говорят о «неблокирующем» подходе к сокетам, используя ioctlsocket (..) или некоторые другие «многопоточные» чудеса, которые делают это, но вы должны управлять ими в другом стиле - и да, у меня естьпопробовал это, и видел много подходов - которые имеют дело со многими потоками вокруг в приложении - что является своего родадействительно сложно ...
Я видел и те "асинхронные" сокеты MSDN, где вы получаете сообщения из сокета - но это слишком много, я думаю.
Так что вместо кодирования яподумав и спросив,
, если select () может добиться цели, говоря об игровом сервере, обрабатывая, скажем, этих 32 игроков одновременно.Я имею в виду, что, как вы думаете из своего опыта, это поможет?Или мне пришлось бы откатиться в конце и изменить весь код сервера при приближении к крайнему сроку ..
В чем именно разница между выбором / ioctlsocket?
Каковы плюсы и минусы для обоих методов?
Большое спасибо за любой ответ на этот вопрос, я надеюсь, что я понимаю, о чем я спрашиваю.