Многие игры используют UDP и TCP вместе. Поскольку каждая игра обязана передавать действия игрока всем, это должно быть сделано тем или иным способом. Теперь все зависит от того, какую игру вы хотите сделать. В RTS, конечно, TCP был бы намного мудрее, так как вы не можете потерять информацию о движении ваших оппонентов. В RPG не так уж важно следить за всем каждую секунду игры.
Суть в том, что если данные должны поступить на клиента, в любом случае, (обновления позиций, обновления также.), Вы должны отправить их через TCP, или вы реализуете собственную надежную протокол на основе UDP. Я создал довольно много сетевых стеков для игр, и я должен сказать, что вы используете, зависит от варианта использования и того, что вы пытаетесь достичь. В основном я делал сердцебиение по UDP, поэтому удаленный сервер / клиент знает, что я все еще там. Проблема с UDP заключается в том, что пакеты теряются и не пересылаются. Если пакет отбрасывается, он теряется навсегда. Вы должны принять это во внимание. Если вы отправляете некоторую информацию по UDP, это должна быть информация, которая может быть потеряна. Все остальное идет через TCP.
И так началось безумие. Если вы хотите получить максимум от обоих, вам придется адаптировать их. TCP иногда может быть медленным, и вам придется ждать, если пакеты фрагментированы или не поступают по порядку, пока ОС не соберет их заново. В некоторых случаях было бы целесообразно создать свой собственный надежный протокол поверх UDP. Это позволит вам полностью контролировать свой трафик. Большинство брандмауэров не сбрасывают UDP или что-либо еще, но, как и в случае с TCP, любой трафик, который не объявлен безопасным (открытие портов, перенаправление пакетов и т. Д.), Сбрасывается. Я бы посоветовал вам прочитать статью TCP и UDP и UDP-Lite в Википедии, а затем решить, какие из них вы хотите использовать для каких целей. AFAIK Battle.net использует комбинацию из двух.