К вашему первому вопросу, да, производительность PB может быть вполне адекватной для игры в реальном времени. Несколько игр были написаны с использованием PB. Например, MV3D использует Twisted и Python-OGRE для представления общего физического моделирования.
К вашему второму вопросу, PB использует потоковый транспорт. Он может работать поверх «надежного UDP», используя что-то вроде модуля PTCP , который поставляется вместе с вершиной.
Однако вы должны знать, что "надежный UDP" будет, как правило, работать намного хуже , чем обычный старый TCP. Маршрутизаторы по всему интернету понимают TCP и могут оптимизировать его, используя это понимание. Если вы реализуете надежность поверх UDP, по необходимости вам потребуется реализовать что-то функционально эквивалентное TCP, и тогда вас оштрафуют на несколько факторов:
- Ваша реализация надежности должна выполняться в вашем приложении, а не в ядре операционной системы.
- ваша реализация TCP должна делать все то же самое, что и TCP, в противном случае вы столкнетесь с загадочными ошибками в непредвиденных сетевых средах.
- на этом пути не могут оптимизироваться под ваш пользовательский уровень надежности
Что может сделать UDP "более быстрым" в некоторых обстоятельствах, так это , отбрасывающий большую часть работы, которую выполняет TCP , поскольку ненадежен . Если ваш уровень обмена сообщениями ненадежен, то вы должны знать, что доставляемые им данные могут быть произвольно отброшены.
Обычно данные, которые подходят для передачи по протоколу UDP в игре, являются данными движения. Когда ваша позиция изменяется, вы можете отправить пакет UDP, и его можно отбросить, потому что игра заботится только о вашей самой последней позиции - после получения обновления все предыдущие позиции не имеют значения. Многие игры отправляют данные о движении по одному (ненадежному) каналу UDP, а затем все управляющие сообщения по более надежному каналу TCP.
Но ответ Жан-Поля об оптимизации является хорошим показателем того, когда вы можете рассмотреть возможность реализации этой оптимизации.