【发布时间】:2013-04-06 01:00:42
【问题描述】:
我将编写一个 Java 服务器/客户端应用程序,其中客户端并不是真正的客户端(它没有主程序),而是一个库。
另外,我要开发一个需要和服务端交互的C模块(熔断器驱动),所以需要调用客户端的函数。
我已经创建了许多从 Java 应用程序调用的 C 函数示例,但没有一个是我需要的。
你能给我一个建议或一些提示吗?
编辑
因为有人不明白我需要什么,所以我想更清楚一点:我有一个服务器,一个程序只能使用 Java 编写的库与之交互。真正的客户端是用C编写的,它必须能够调用库的函数,所以在C中我必须调用java方法
【问题讨论】:
-
@RussellZahniser 完全没用的评论,因为他试图从 c 调用 java,而不是从 java 调用 c。
-
@RussellZahniser 他有一个需要一些 Java 库的 C 客户端,JNI 允许 Java 调用 C 函数,但他想做的恰恰相反,他想从 C 应用程序调用他的 Java 库,所以他不需要JNI
-
@Harlandeaka Invocation API 允许您从 C/C++ 调用 Java 代码,它是 JNI 规范的一部分。
-
如果您无法按照 maba 的建议进行操作,您始终可以 1) 在 Java 库周围创建一个 main() 类,该类从标准输入获取请求并将响应写入标准输出 2) 启动 JVM作为来自 C 客户端的新进程,并通过 stdin/stdout 与包装的 Java 库进行交互。
-
如果您已经在做客户端-服务器架构,为什么不实际做呢?与使用原始 JNI 调用来编组数据结构相比,将 ZeroMQ 或 DBus 与其他消息传递中间件和序列化库(JSON 或 Protocol Buffers 或 Thrift 或其他)连接在一起应该更容易维护。
标签: java c java-native-interface