用于 Ocaml 应用程序的 Java GUI
我正在为 Ocaml 应用程序开发 GUI(用 Java 语言)。沟通两个应用程序的最佳方式是什么?
干杯。
I m developing a GUI (in Java) for an Ocaml application. Whats the best way to communicate the two application.
Cheers.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你没有说你的目标环境是什么样的。
如果它是标准桌面或服务器环境,您可以使用松散耦合的方法,其中 GUI 和应用程序是通过任何方便的 IPC 方法进行通信的单独进程。
对于更紧密耦合的方法,我可以想到两种可能有效的方法。第一,您可以编译 OCaml 并使用 Java 本机接口将其作为本机代码与 JVM 一起运行。
第二,您可以使用 OCaml-Java 将 OCaml 编译为 JVM 字节码: http://ocamljava.x9c.fr/
免责声明:我只阅读过这些方法,从未尝试过。当然,可能还有其他方法可以解决这个问题。
You don't say what your target environment looks like.
If it's a standard desktop or server environment you could use a loosely coupled approach where the GUI and app are separate processes communicating by any convenient IPC method.
For a more tightly coupled approach I can think of two ways that might work. One, you could compile your OCaml and run it as native code alongside the JVM using the Java Native Interface.
Two, you could compile your OCaml into JVM bytecodes using OCaml-Java: http://ocamljava.x9c.fr/
Disclaimer: I have only read about these approaches, never tried them. And of course there could be other ways to go about it.
截至 2011 年 11 月,我的建议是使用 JSON 作为序列化格式,并使用 Zeromq 作为传输。关于“我需要更多信息才能给出更好的答案”的明显免责声明适用。
JSON 很简单并且是广泛支持的标准。 Zeromq 是套接字功能的抽象,它应该能够透明地在不同平台/堆栈上编写的两个进程之间进行通信,而无需在直接处理套接字时处理诸如缓冲之类的低级问题。
在 OCaml 方面,Caravan Zeromq 绑定看起来最好。
https://github.com/bashi-bazouk/Caravan
在java方面,推荐什么在 Zeromq 网站上。
对于 JSON,Ocaml 有一个不错的 JSON 库:
http://martin.jambon.free.fr /yojson.html
但是 JSON 是如此微不足道,如果您要来回发送的数据类型相对较小,您可能只需编写自己的简单解析器即可。
java 方面的 JSON 我没有推荐,但有很多库。
Thrift、Avro 或 Google ProtoBuffers 的二进制形式可能比 JSON 更快,但其中的风险在于 Ocaml 绑定是否处于良好状态(我个人不知道它们是否处于良好状态)。
My recommendation as of Nov 2011 would be JSON as a serialization format over zeromq as a transport. The obvious disclaimer about "I'd need more info to give a better answer" applies.
JSON is simple and a widely supported standard. Zeromq is an abstraction of what sockets do that should transparently be able to communicate between two processes written on different platforms/stacks, without having to deal with low level issues like buffering when dealing directly with sockets.
On the OCaml side, the Caravan zeromq binding looks best.
https://github.com/bashi-bazouk/Caravan
On the java side, whatever is recommended on the Zeromq site.
For JSON, there is a decent JSON library for Ocaml:
http://martin.jambon.free.fr/yojson.html
But JSON is so trivial you may just write your own naive parser if the data types you'll send back and forth are relatively small.
JSON on the java side I don't have a recommendation but there are many libraries.
Thrift, Avro, or Google ProtoBuffers would probably be faster than JSON in their binary form, but the risk in those is whether the Ocaml bindings are in decent shape (I personally have no idea if they are).
JSON 和套接字是我选择在 Ocaml 和 Ocaml 之间进行通信的解决方案。爪哇。
在 OCAML 方面,我使用 Martin Jambon 的 atdgen,它是一个基于 Yojson 库的 JSON 序列化器/反序列化器。 “atdgen”从 .atd 类型定义文件生成解析器和打印机:
在 JAVA 方面,我使用 Jackson 库和 Jackson 注释来指定 JSON 格式。
至于套接字,我只使用 Ocaml 和 JAVA 中的标准套接字库。
这个解决方案在 Unix 和 Windows 操作系统上都运行良好。
另一种解决方案是使用 google protocol buffer 和 Ocaml piqi 工具。它应该更高效、更安全,因为“.proto”文件可用于生成 java 代码和 Ocaml 代码。
有人尝试过这个解决方案吗?
JSON and sockets is the solution I have chosen to communicate between Ocaml & Java.
On the OCAML side, I use Martin Jambon's atdgen, which is a JSON serializer/deserializer based on the Yojson library. "atdgen" generates a parser and a printer from an .atd type definition file:
On the JAVA side, I use Jackson library and Jackson annotations to specify the JSON format.
As for sockets, I use just standards sockets library in Ocaml and JAVA.
And this solution works fine both on Unix and Windows OS.
Another solution would to be use google protocol buffer and the Ocaml piqi tools. It should be more performant and safer as the ".proto" file can be used to generate both java code and Ocaml code.
Did anybody tried this solution ?