Я создаю игру с сервером и несколькими клиентами. Я использую Kryonet для работы в сети, и у каждого соединения есть собственный прослушиватель, через который он получает пакеты.
Слушатели вызываются в фоновом потоке Kryonet, и я не могу их заблокировать, потому что это повлияет на все пользователи.
Я создал свою базу данных, настроил ConnectionPool в синхронизированном классе Singleton:
private static final BasicDataSource dataSource = new BasicDataSource();
static {
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://111.111.111.111/db");
dataSource.setUsername("server");
dataSource.setPassword("serverpass");
}
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
и теперь мне нужно выполнить несколько запросов. А вот и моя проблема. Как мы знаем, запрос может занять много времени, чтобы вернуть результат, поэтому совершенно неприемлемо выполнять его в потоке «Kryonet» (когда пакет получен). Например, когда пользователь отправляет свой «RegistrationPacket», мне нужно сделать запрос к базе данных и вернуть ему результат в пакете. Когда я получаю пакет, мне нужно перевести его в фоновый режим и оттуда - отправить результат клиенту.
Вот мой вопрос: как обрабатывать запросы к базе данных в фоновом режиме с помощью Java?
Должен ли я использовать исполнителей? Потоки? Насколько я знаю, открывать поток для каждого соединения - плохая идея (вызывает более 200 рабочих). Равно (катастрофа). Если бы кто-то мог мне помочь, я был бы благодарен! :)