Лучший ответ, вероятно, "попробуй и посмотри".
Я придерживаюсь мнения, что издержки TCP на самом деле не так уж важны для большинства приложений. Размер заголовка составляет порядка 10 байт, и для каждого сообщения необходимо отправлять подтверждающие сообщения туда и обратно.
Настоящим убийцей игры в реальном времени будет задержка. UDP - это огонь и забыл. Это означает, что каждое сообщение просто отстает на время прохождения между двумя узлами. Поскольку для TCP требуется подтверждение, сообщение не считается «отправленным», пока другая сторона не получит ответ.
Как правило, проблема между ними сводится к обнаружению ошибок. Если сообщение как-то теряется в сети, как бы вы хотели, чтобы оно обрабатывалось? Если каждое сообщение является довольно важным, то если вы используете UDP, вам просто придется реализовать собственный TCP-подобный протокол поверх него. Вы также можете использовать TCP и позволить сетевому оборудованию помочь вам. Однако, если старые сообщения по истечении времени, необходимого для нескольких повторных попыток (каждое с задержкой в сети), все равно будут мусором с появлением новых обновлений, то TCP для вас является пустой тратой.