WebSocket и Leap Motion - PullRequest
       14

WebSocket и Leap Motion

0 голосов
/ 19 марта 2019

Я пишу небольшое приложение на Java с Eclipse для использования моего устройства Leap Motion как мыши. Все работает, когда запускается из Eclipse, работает быстро, быстро реагирует и не зависает, не падает, или другие.

Я экспортирую приложение Java в Runnable JAR, я запускаю его с javaw -jar LeapMotionController.jar

Все медленно, чтение и запись в XML для конфигураций, установление соединения с локальной службой сокетов.

Приложение имеет 3 класса,

  1. LeapMotion
  2. SysTray
  3. и Настройки

Основным приложением является класс LeapMotion, с этого я запускаю класс Systray и после запуска команды запуска для инициализации соединения.

SysTray.chgIcon("warn");
container = ContainerProvider.getWebSocketContainer();
container.setDefaultMaxBinaryMessageBufferSize(1024);
container.setDefaultMaxTextMessageBufferSize(1024);
session=container.connectToServer(LeapMotion.class, URI.create("ws://localhost:6437/v7.json"));
session.setMaxBinaryMessageBufferSize(1024);
session.setMaxTextMessageBufferSize(1024);
wait4TerminateSignal();

Сигнал wait4TerminateSignal,

private static void  wait4TerminateSignal() {
    synchronized(waitLock) {
        try {
            for (;;) {
                waitLock.wait();
                if(session==null) {
                    waitLock.notify();
                    break;
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Systray отображается через 1 секунду после чтения XML-файла для переменных установки. Документ загружается в переменную для повторного использования (ограничить чтение прямого файла). Через 5-10 секунд я получаю первый ответ от websocket, рукопожатие с информацией о версии устройства ....

После того, как все сообщения поставлены в очередь и создают большой буфер, я перепробовал два значения (10 и 1024), один раз помог, после того, как прошло очень-очень медленно.

В диспетчере задач я использую 120 МБ памяти (32 ГБ), процессор никогда не превышает 1,5% (у меня 8 ядер, 16 потоков с тактовой частотой 3,2 ГГц). В процессе javaw используется 50-60 потоков.

Я также добавил лимит для активности отбрасывания. Используется инкремент и, когда достигается значение, обрабатывается сообщение, и инкремент сбрасывается до 0.

Вам необходимо знать о веб-сокете Leap Motion; - Сделать в среднем 110 сообщений в секунду, я не могу контролировать количество - Не нужно отправлять сообщение, чтобы получить ответ - Выводится только в формате JSon

Я проверял и искал около; - Как оптимизировать Java (не найти реальной помощи) - Еще один способ использования WebSocket, другим нужно сообщение для получения ответа (чат) - используйте Elevator.exe (Google google), чтобы сделать Java в праве администратора, а не вносить изменения - Вручную увеличить приоритет процесса (чуть выше, и в режиме реального времени), без изменений - Не нашли информацию о буфере, а код найден в https://dzone.com/articles/sample-java-web-socket-client (вторая часть кода)

Если у меня пропущена информация или требуется более подробная информация, оставьте мне комментарий.

Я хочу повысить производительность. С количеством сообщений и данных, которые я получаю от устройства, я могу поддержать удаление очереди или подобное решение.

Заранее благодарю за помощь.

(извините за мой плохой английский)

1 Ответ

0 голосов
/ 23 марта 2019

Хорошо, наконец-то я нашел проблему, это Java Runtime.

Начиная с Java 1.8, это включает больше безопасности. Это вызывает много проблем с; чтение / запись файла и TCP-соединения. Многие пользователи сообщают о замедлении от 4 до 10 раз больше, чем 1,7.

Я установил и запустил свое приложение с Java 1.7, работаю очень быстро и не имею ошибок.

Для моего проекта я упаковываю Java 1.7 с .jar, чтобы выпустить его с правильной версией Java.

новее лучше не надо: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...