Ответ 1
Несколько вещей, которые следует учитывать:
- Java NIO действительно хорош и может обрабатывать вид пропускной способности/латентности, который вы ищете. Не используйте какие-либо старые структуры/API-интерфейсы для сетей и сериализации.
- Задержка действительно важна. Вы в основном хотите минимальный уровень над NIO, который позволяет отправлять очень быстрые, небольшие, индивидуальные сообщения с минимальными издержками.
- В зависимости от игры вам может потребоваться TCP или UDP или оба. Используйте TCP для важных сообщений, UDP для сообщений, которые не являются строго необходимыми для продолжения игры или будут включены в будущие обновления (например, обновления местоположения в FPS).
- Некоторые люди реализуют собственный TCP-протокол обмена сообщениями через UDP для игр в реальном времени. Это, вероятно, больше хлопот, чем того стоит, но имейте это в виду как вариант, если вам действительно нужно оптимизировать для определенного типа связи.
- Для игр в реальном времени вы почти всегда выполняете настраиваемую сериализацию (например, отправляете только дельта, а не полные обновления позиций объекта), поэтому убедитесь, что ваша инфраструктура позволяет это
Учитывая это, я бы рекомендовал один из следующих
- Kryonet - lightwieght, настраиваемый, предназначенный для такого рода целей
- Netty - чуть более ориентированный на предприятия, но очень способный, надежный и масштабируемый
- Roll-your-own на основе NIO - сложно, но возможно, если вы хотите действительно мелкозернистый контроль. Я делал это раньше, но в ретроспективе я, вероятно, должен был выбрать Kryonet или Netty
Удачи!