WebSocket和飞跃运动

时间:2019-03-19 07:48:43

标签: java json windows websocket

我正在用Eclipse用Java编写一个小应用程序,以便像鼠标一样使用我的Leap Motion设备。当从Eclipse运行时快速,响应迅速且不会冻结,崩溃或其他情况时,一切都正常工作。

我将Java应用程序导出到可运行的JAR,并使用javaw -jar LeapMotionController.jar来运行

一切都很缓慢,无法以XML进行配置配置和建立与本地Web套接字服务的连接。

该应用程序具有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();
        }
    }
}

在读取设置变量的XML文件后1秒钟后显示Systray。该文档已加载到变量中以供重用(限制对直接文件的读取)。 5到10秒钟后,我收到了websocket的第一个答案,即有关设备版本信息的握手。...

之后,所有消息都排队并做一个大缓冲区,我尝试了两个值(10和1024),一次被帮助,之后走得很慢。

在任务管理器中,我使用120MB内存(32GB),CPU永远不会超过1.5%(我有8个内核,在3.2GHz时有16个线程)。 javaw进程使用了​​50-60个线程。

我还增加了放置活动的限制。是使用增量,当达到该值时,处理消息,并将增量重置为0。

您需要了解Leap Motion Web套接字;  -平均每秒110条消息,我无法控制数量  -无需发送消息即可获得回复  -仅以JSon格式输出

我已经测试并搜索过;  -如何优化Java(找不到真正的帮助)  -使用WebSocket的另一种方式,其他需要消息以获取答复(聊天)  -使用Elevator.exe(google it)在管理员权限中设置Java,而不进行更改  -手动提高流程优先级(略高于实时),无需更改  -尚未找到有关缓冲区的信息,并且代码是在https://dzone.com/articles/sample-java-web-socket-client(代码的第二部分)上找到的代码

如果我错过信息或需要更多详细信息,请给我评论。

我希望提高性能。通过我在设备上收到的消息和数据量,我可以支持队列丢弃或类似的解决方案。

提前感谢您的帮助。

(对不起我的英语不好)

1 个答案:

答案 0 :(得分:0)

好的,我终于找到了问题,这是Java Runtime。

自Java 1.8开始,它包含更多的安全性。这引起很多问题;文件读/写和tcp连接。许多用户报告的速度是1.7的4到10倍。

我已经使用Java 1.7安装并运行了我的应用程序,运行速度非常快,并且没有任何错误。

对于我的项目,我将Java 1.7与.jar打包在一起,以使用正确的Java版本发布它。

更新不一定更好:P