Лучше всего, если бы ваша игра проверила входящие соединения сокетов в отдельном потоке. Вы можете создать Runnable
, который будет постоянно прослушивать подключения.
Когда вы проверяете наличие входящего соединения: Socket connection = server.accept();
, то, что на самом деле происходит, вы размещаете блок на этом конкретном потоке, пока не получите соединение. Это приведет к тому, что ваш код перестанет выполняться. Единственный путь вокруг этого - распараллеливание. Вы можете обрабатывать все свои сетевые задачи в одном потоке, одновременно обрабатывая свою игровую логику и рендеринг на другом.
Помните, что при написании кода, который будет выполняться на нескольких потоках, много пит-падений. Java предоставляет некоторые инструменты для минимизации потенциальных проблем, но вам решать, программист, чтобы ваш код был потокобезопасным. Подробные сведения о многих проблемах, связанных с параллельным программированием, выходят за рамки этого вопроса. Я предлагаю вам немного поработать над этим, потому что ошибки, возникающие из этого типа программирования, иногда трудно воспроизвести и отслеживать.
Теперь, когда я дал вам этот отказ от ответственности, чтобы использовать Runnable
сделать то, что вы пытаетесь сделать, вы могли бы сделать что-то похожее на это:
Runnable networkListener =() -> {
//declare and instantiate server here
while(true){
Socket connection = server.accept();
//whatever you would like to do with the connection would go here
}
}
Thread networkThread = new Thread(networkListener);
networkThread.start();
Вы бы на месте, что до вашего игрового цикла, и это будет порождать поток, который будет прослушивать соединения, не прерывая игру. Там есть много хороших идиом о том, как обращаться с Socket
с помощью ThreadPool
s, чтобы отслеживать их, создавая новый Thread
каждый раз, когда будет создано новое соединение, поэтому я предлагаю вам провести некоторое исследование этого.
Удачи вам, это непростая дорога, по которой вы собираетесь рисковать.
Что вы имеете в виду? – Caspermartijn
@Caspermartijn Я отредактировал мое сообщение – CraigR8806
, и этот runnable я могу начать в любое время, когда хочу? – Caspermartijn