WebSocket 和 Leap Motion

水平克罗

我正在用 Eclipse 用 Ja​​va 编写一个小应用程序,以便像鼠标一样使用我的 Leap Motion 设备。当从 Eclipse 运行时,一切都在工作,速度快,响应迅速,没有死机、崩溃或其他情况。

我将 Java 应用程序导出到 Runnable JAR,我用javaw -jar LeapMotionController.jar

一切都很慢,在 XML 中读取和写入配置,建立到本地 Web 套接字服务的连接。

该应用程序有 3 个类,

  1. 飞跃运动
  2. 系统托盘
  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 秒后显示。文档加载在变量中以供重用(限制直接文件的读取)。5-10 秒后,我收到 websocket 的第一个答案,包含有关设备版本信息的握手....

之后,所有消息都排队并制作了一个大缓冲区,我尝试了两个值(10 和 1024),一次是有帮助的,之后非常非常慢。

在任务管理器中,我使用 120MB 内存(32GB),cpu 从未超过 1.5%(我有 8 个内核,3.2GHz 下的 16 个线程)。javaw 进程使用了​​ 50-60 个线程。

我还为掉落活动添加了限制。使用增量,当达到该值时,处理消息,增量重置为 0。

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

我已经测试和搜索过;- 如何优化 Java(没有找到真正的帮助) - 使用 WebSocket 的另一种方式,其他需要一条消息来获得回复(聊天) - 使用 Elevator.exe(谷歌它)使 Admin 中的 Java 正确,而不是进行更改 -手动增加进程优先级(小上面,和实时),它没有改变 - 没有找到有关缓冲区的信息,代码是在https://dzone.com/articles/sample-java-web- 上找到的套接字客户端(代码的第二部分)

如果我有遗漏信息或想了解更多详细信息,请给我留言。

我正在寻求提高性能。根据我从设备接收到的消息和数据量,我可以支持队列丢弃或类似的解决方案。

预先感谢您的帮助。

(抱歉我的英语不好)

水平克罗

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

从 Java 1.8 开始,包含更多的安全性。这会导致许多问题;文件读/写和 tcp 连接。许多用户报告比 1.7 慢 4 到 10 倍。

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

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

新的不一定更好:P

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Leap Motion入门

来自分类Dev

使用C#和Unity 3D在Leap Motion中启用手势

来自分类Dev

使用Leap Motion进行拇指检测

来自分类Dev

Leap Motion进行数据预处理

来自分类Dev

无法识别Leap Motion C ++库?

来自分类Dev

Finger.Is扩展了Leap Motion C#

来自分类Dev

Leap Motion固件更新突然停止无法安装

来自分类Dev

Unity Leap Motion 错误消息“INPUT AXIS NOT SET UP”

来自分类Dev

SWIFTUI和Core Motion

来自分类Dev

Boost ::公历和leap年

来自分类Dev

Tkinter Enter和Motion绑定

来自分类Dev

相关循环和leap年C#

来自分类Dev

(Transact-SQL)DATEDIFF和leap年

来自分类Dev

Java Swing应用程序与Leap Motion侦听器之间的通信

来自分类Dev

JavaScript应用程序如何检测Leap Motion设备是否已连接

来自分类Dev

将Leap Motion控制器与QT创建器一起使用

来自分类Dev

Java Swing应用程序与Leap Motion侦听器之间的通信

来自分类Dev

为什么使用Leap Motion组件时Unity(4.6.2f1)崩溃

来自分类Dev

使用Leap Motion时无法使OnCollisionEnter与Mesh Collider一起使用

来自分类Dev

Unity Leap Motion 检测手指与其他手指/手掌的碰撞

来自分类Dev

Websocket和telnet连接

来自分类Dev

WebSocket OnMessage和ServerEndpoint

来自分类Dev

Websocket和Perl CGI

来自分类Dev

Tomcat 8和Websocket

来自分类Dev

Websocket和Perl CGI

来自分类Dev

UNIX Seconds,TAI(SI)秒,Leap Seconds和实际代码

来自分类Dev

在JavaScript和Java中模拟接收Leap框架

来自分类Dev

EmberJS和WebSocket 最佳方法?

来自分类常见问题

Websocket Lambda Python和Angular