TCP против Enet для онлайн карточной игры с лобби?
Я работаю над пошаговой карточной игрой для ПК. Он имеет лобби, которое будет автоматически обновлять список активных игр, поэтому я буду отправлять много обновлений многим клиентам. Для этого у меня будет игровой сервер. Лаг для меня не такая уж большая проблема, если игрокам приходится иногда ждать еще 1/4 секунды, пока их карта не будет показана, меня это на самом деле не касается. Меня беспокоит надежность и стабильность. Я хочу, чтобы у меня было много игр для 4 игроков, и я также позволяю людям смотреть определенную игру.
Мне также нужно будет войти в систему и запомнить их сеанс, если они отключатся, чтобы они могли вернуться в игру, если они отключатся.
Я спорю о том, стоит ли мне использовать Enet, основанный на надежности UDP, или обычный старый TCP/IP.
В конечном итоге мне понадобится отправить им дополнительный контент, например, дополнительные колоды, которые будут иметь форму архива. Но для этого я уверен, что есть библиотека, которая может помочь мне получить их из источника HTTP.
Если у кого-то есть опыт работы с одним из них или обоими, я буду признателен за ваш вклад.
Thnks
2 ответа
Я бы придерживался классического TCP, а не какой-то библиотеки, которая взломала правильный порядок и надежность доставки пакетов в протокол, не предназначенный для этого.
Заявление Enet состоит в том, чтобы иметь некоторые из преимуществ TCP, обеспечивая при этом скорость для игр в режиме реального времени. Эта фраза заставляет меня думать о FPS, который вообще не является вашим приложением.
Я не работал с ENet, но я быстро прочитал его документацию, и кажется, что он может быть полезен в определенных обстоятельствах.
Первый вопрос: нужен ли вам надежный механизм доставки пакетов или он ненадежен? ENet может работать надежно, но в этот момент он становится чем-то похожим на TCP, и, если вам не нужна поддержка многопотоковости, я не уверен, что с этим стоит дурачиться.
Если ненадежность - это нормально, тогда возникает следующий вопрос: нужна ли вам поддержка фрагментации пакетов, которую имеет ENet? Если ваши пакеты будут маленькими, я бы сказал, просто используйте UDP напрямую.
Мне неясно, как ENet использует UDP-сокеты и как он управляет соединениями, поэтому мне неясно, лучше ли вам использовать множество открытых TCP-сокетов или множество открытых ENet-соединений.