我有一个java程序,它从COM端口收集实时传感器数据,我想在不使用node.js的情况下将其发送到javascript。
传感器数据应每秒至少提供 2 次。
我很难使用数据库进行通信,但这可能会减慢解决方案的速度。如果需要,浏览器支持可以限制为谷歌浏览器。(osx,win,linux)
您理想的解决方案是什么?
编辑 : - Java 软件应与基于 Web 的 JavaScript 客户端运行在同一平台上。
本质上,正在发送的数据是GPS,..在地图上显示的数据。
LiveConnect就是你要找的。它允许您定义从JS到Java的通信方法,反之亦然。它是JDK中的内置技术。
多种方式执行此操作。
-一个java闪存到JavaScript桥,通过套接字进行通信。这是最兼容的方式,因为大多数浏览器都支持闪存。有一些开源 AS3 桥,但您需要套接字。
- 一个java小程序并从小程序调用JavaScript代码.如果你有权限读取com端口是最简单的方法,否则你可能不得不为小程序认证而苦苦挣扎。必须在您的计算机上安装 Java 运行时。
- 一个websocket,如果你使用Firefox 8.0+或谷歌浏览器的最新版本与你的java应用程序wia websockets进行通信。是最现代的方法。它不适用于IE,但你不需要任何其他应用程序作为javascript和java之间的桥梁,你可能需要努力找到java套接字服务器示例,创建自己的实现或使用支持 WS://或 WSS://的Web包含器/应用程序服务器
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
//JAVA
public class Main {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
if (!(engine instanceof Invocable)) {
System.out.println("Invoking methods is not supported.");
return;
}
Invocable inv = (Invocable) engine;
String scriptPath = "/Users/sheikhhussain/IdeaProjects/JavaHome/src/calculator.js";
engine.eval("load('" + scriptPath + "')");
Object calculator = engine.get("calculator");
int x = 3;
int y = 4;
Object addResult = inv.invokeMethod(calculator, "add", x, y);
Object subResult = inv.invokeMethod(calculator, "subtract", x, y);
Object mulResult = inv.invokeMethod(calculator, "multiply", x, y);
Object divResult = inv.invokeMethod(calculator, "divide", x, y);
System.out.println(addResult.toString());
System.out.println(subResult);
System.out.println(mulResult);
System.out.println(divResult);
}
}
// JAVASCRIPT
var calculator = new Object();
calculator.add = function (n1, n2) "jjj";
calculator.subtract = function (n1, n2) n1 - n2;
calculator.multiply = function (n1, n2) n1 * n2;
calculator.divide = function (n1, n2) n1 / n2;