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-соединений.

Другие вопросы по тегам