2016-01-14 5 views
0

В настоящее время я создаю очень простую игру Pong в Java, которая должна работать через сеть. Я основал проект сети с предыдущей клиентской задачей чата, которую я сделал ранее, которая состоит из сервера и клиента. Клиенты, подключенные к серверу, имеют отдельные потоки, ожидающие отправки информации на сервер (клиенты, по-видимому, ограничены двумя играми в понг)Java TCP Sockets, наилучшая практика для сокращения задержки

То, как я разработал игру для понга, состоит в том, что все игровые логики рассчитаны на так как это такие простые вычисления, и данные сохраняются в объекте PongData, который состоит из 4-х целых чисел и одной точки (2 интервала для игроков y-позиций, 2 для оценки и 1 балл для позиций мяча), затем транслируется 2 клиента через ObjectOutputStream и все клиенты делают это на экране. Всякий раз, когда они нажимают кнопку на клиенте, которая передается через DataOutputStream на сервер.

Когда я запускаю игру локально с сервером и двумя клиентами, он работает отлично, но как только я запускаю одного из клиентов на отдельном компьютере, он очень сильно отстает, в основном делая игру неиграбельной. Я не уверен, что лучше всего разрабатывать такие игры: я просмотрел stackoverflow и Интернет и отправку объектов через UDP, кажется довольно сложным и, прежде всего, очень опасным, но я не уверен, как это сделать через TCP, не получив такого большого запаздывания.

Дополнительная информация, которую я могу дать, состоит в том, что поток игрового цикла выполняет все вычисления, передает информацию, а затем спит в течение 10 мс, прежде чем повторять ее снова, что дает игре хорошую скорость (по крайней мере локально).

ответ

0

Промыть потоки и вызвать Socket.setTcpNoDelay(true) при создании гнезда.

+0

Использование settcpnodelay сделало чудеса, очень незначительное заикание сейчас, спасибо! – ElliotEff