Отключение клиента Java Kryonet

У меня проблема с крионетом, что клиент отключается. Может ли кто-нибудь помочь мне в том, что может быть источником этой проблемы?

используя библиотеку kryonet, чтобы клиент оставался на связи, ему необходимо отправлять и получать пакеты KeepAlive. Клиентский поток автоматически обрабатывает это. но если мой клиент выполняет тяжелую работу (Примечание: в другом потоке), кажется, что это мешает клиентскому потоку делать это.

проблема возникает при чтении большой таблицы базы данных, требуется время, чтобы выбрать некоторые столбцы из таблицы (какой размер для Gega)

но постарайтесь максимально упростить проблему, создав очень большой список на стороне клиента после того, как сервер отправит что-либо для запуска задачи.

после долгих поисков и ожидания причины проблемы; я пытаюсь

  1. различные пороги тайм-аута
  2. разные версии крио 2.23 и 2.20
  3. используя соединение TCP и UPD (Примечание: я подключаюсь как на сервере, так и на клиенте)

вот вам код клиента, если получен какой-либо объект. Сделайте это в другом потоке:

  @Override
    public void received(Connection connection, Object object) {
        if (object instanceof String) {
            new Thread() {
                @Override
                public void run() {
                    final int RECORD_COUNT = 99999999;
                    final String RECORD = "Help I am trapped in a fortune cookie factory\n";
                    List<String> records = new ArrayList<String>(RECORD_COUNT);
                    for (long i = 0; i < RECORD_COUNT * 4; i++) {
                        records.add(RECORD);
                    }
                }
            }.start();
        }
    }

Журнал клиента:

после некоторых сообщений KeepAlive он выдает два типа сообщений (соединение было прервано) или (время ожидания соединения)

00:24 DEBUG: [kryo] Write: KeepAlive
00:28 DEBUG: [kryo] Read: KeepAlive
00:37 DEBUG: [kryo] Write: KeepAlive
00:37 DEBUG: [kryonet] Connection 7 update: An established connection was aborted by the software in your host machine

OR

00:35 DEBUG: [kryo] Read: KeepAlive
00:41 DEBUG: [kryo] Write: KeepAlive
00:50 DEBUG: [kryonet] Connection 8 timed out.

Журнал сервера:

94:10 DEBUG: [kryo] Write: KeepAlive
94:11 DEBUG: [kryonet] Connection 7 timed out.
94:11  INFO: [kryonet] Connection 7 disconnected.

person userG    schedule 22.04.2015    source источник


Ответы (1)


Я думаю, вы не запускаете клиент в отдельном потоке.

«Начиная с r122, потоки обновления клиента были преобразованы в потоки демона, в результате чего дочерние процессы закрывались, как только они завершали инициализацию». Решение: «Может быть, вы могли бы использовать это? new Thread(client).start();» .

Таким образом, вы должны вместо

client.start();

Вы должны использовать

new Thread(client).start();
person Sneh    schedule 15.05.2015
comment
и я использую это в клиенте //Start the client new Thread(clientMH).start(); - person userG; 17.05.2015