Я создаю игру html5/js, которая будет иметь возможности онлайн для моего бэкэнда. Я решил использовать сервер wildfly. Клиент будет связываться с сервером через веб-сокеты.wildfly всегда работает в фоновом режиме
Я предназначил для моего сервера wildfly также отвечать за решения логической логики, такие как перемещение npc. Мой план состоял в том, чтобы иметь компонент @startup, который будет запускать петлю серверной игры для обработки этой логики. Затем цикл сервера будет разговаривать с serverEndPoint через HornetQ. Мой serverEndPoint и сервер внешний вид петли, как это:
ServerEndPoint
@ServerEndpoint(value= "/game/{user-id}")
public class GameEndpoint {
@Inject
GameManager gameState;
GameWorld gameWorld;
Player p;
private Logger logger = Logger.getLogger(this.getClass().getName());
@OnOpen
public void onOpen(Session session){
//do stuff
}
@OnMessage
public void onMessage(Session session, String message){
//do stuff
}
@OnClose
public void onClose(CloseReason reason){
//do stuff
}
@OnError
public void error(Throwable t){
//do stuff
}
}
GameWorld
@Startup
@Singleton
public class GameWorld {
@Inject
GameManager gameState;
private Logger logger = Logger.getLogger(this.getClass().getName());
@PostConstruct
public void init(){
gameloop();
}
private void gameloop(){
while(true){
logger.info("This is a test!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@PreDestroy
public void terminate(){
//do stuff
}
}
проблема с этим состоит в том, что петля сервер замерзнет все, как это бесконечный цикл (например, если Я пытаюсь получить доступ к веб-странице html, я получаю 404). очевидно, это можно было бы решить, если serverLoop был в отдельном потоке, но после выполнения некоторых исследований кажется, что резьба в jboss очень сложна, так как трудно понять, какие зависимости нужно вводить и т. д.
Может ли кто-нибудь пролить свет на то, как я могу решить эту проблему? любая помощь по этому вопросу была бы потрясающей.
спасибо за подробный ответ Alex I я буду проворно перемещать логику сервера из ee-стека – zidsal
> «Java EE, однако, не предназначен для длительных, поточно-блокирующих фоновых процессов». В Java EE есть Java Batch для этого, что делает именно это. См. Эти ссылки для получения дополнительной информации https://javaee7.zeef.com/arjan.tijms # block_239 –
Спасибо, Арьян, я не знал об этом. –