在 C# 和 Java 应用程序之间传递数据
Passing data between C# and Java Apps
我在 C# .Net 中有一个 API 用于上传大小在 10 B - 100 KB 之间的文件。每秒,系统会收到大约 5 个这样的调用。现在我想将此文件传递给 JAVA 进程(因为它是 Kafka 的生产者,我们希望它基于 JVM,而 C# API 是遗留的)。两者几乎总是驻留在同一台机器上。最好的方法是什么?
我阅读了有关 jni4net 的信息,IKVM 用于与来自 C# 的 Java 进行交互。它们会更好还是我应该让它基于套接字(Web API in Java 接受文件),或者我应该从 C# App 上传的本地文件系统或我缺少的任何其他选项读取?
在高并发环境下,从本地文件系统读取可能不是个好主意。
您可以使用 java FileChannel 支持的内存映射文件。
根据操作系统,您还可以为 IPC 使用命名管道,这里有一篇文章展示了如何在 .Net 和 Java 之间使用管道:
http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html
考虑到所有选项,我会选择套接字。它们便携且易于操作,很可能会满足您的性能要求。
您也可以使用消息队列。如果将文件存储在文件系统中,则可以放置二进制消息、序列化文件或将文件的位置放在队列中。
带有套接字和消息队列的解决方案将使您拥有更加分布式的架构,即不会让一台机器加载太多工作。
如果您想实际使用 Java 中的 C# API,桥接可能是可行的方法。它可能比 Web API 更高效。一些桥梁还允许您在同一进程中 运行 C# 和 Java,这样效率更高。
除了您提到的桥,您可能还想考虑一下 JNBridgePro。您可以在我们的网站上找到更多信息。
披露 -- 我隶属于 JNBridge。
我在 C# .Net 中有一个 API 用于上传大小在 10 B - 100 KB 之间的文件。每秒,系统会收到大约 5 个这样的调用。现在我想将此文件传递给 JAVA 进程(因为它是 Kafka 的生产者,我们希望它基于 JVM,而 C# API 是遗留的)。两者几乎总是驻留在同一台机器上。最好的方法是什么?
我阅读了有关 jni4net 的信息,IKVM 用于与来自 C# 的 Java 进行交互。它们会更好还是我应该让它基于套接字(Web API in Java 接受文件),或者我应该从 C# App 上传的本地文件系统或我缺少的任何其他选项读取?
在高并发环境下,从本地文件系统读取可能不是个好主意。
您可以使用 java FileChannel 支持的内存映射文件。
根据操作系统,您还可以为 IPC 使用命名管道,这里有一篇文章展示了如何在 .Net 和 Java 之间使用管道:
http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html
考虑到所有选项,我会选择套接字。它们便携且易于操作,很可能会满足您的性能要求。
您也可以使用消息队列。如果将文件存储在文件系统中,则可以放置二进制消息、序列化文件或将文件的位置放在队列中。
带有套接字和消息队列的解决方案将使您拥有更加分布式的架构,即不会让一台机器加载太多工作。
如果您想实际使用 Java 中的 C# API,桥接可能是可行的方法。它可能比 Web API 更高效。一些桥梁还允许您在同一进程中 运行 C# 和 Java,这样效率更高。
除了您提到的桥,您可能还想考虑一下 JNBridgePro。您可以在我们的网站上找到更多信息。
披露 -- 我隶属于 JNBridge。