我有一个用Java制作的游戏服务器。我想创建一个插件系统,加载.NET DLL并调用该DLL内的事件/函数,然后在那些我将不得不调用游戏服务器(Java)中的函数。目前唯一给我带来麻烦的部分是如何连接java和.NET dll。
我一直在寻找并发现了一些东西,但它们都是基于产品而我想为此制作我自己的界面。啊,更不用说它需要具有高性能,如果必须的话,代码将在一秒钟内调用很多次。有人能指出或给我一些想法我怎么能解决这个问题?
编辑:
使其更明确:
答案 0 :(得分:2)
如果您的目标是Windows,请查看jni4net。这是一个alpha质量版本,但Robocode已经使用它在Java运行时内运行.NET机器人。
另一种选择是使用高性能消息传递方法。您需要第二个进程 - 可能是.NET插件主机。然后,该进程与主Java游戏进程交换消息。像0MQ这样的消息传递库非常快,但对于您的想法可能还不够快。此外,您还必须创建大量消息管道,这可能会花费成本/时间。
答案 1 :(得分:1)
尝试使用iKVM:
IKVM.NET是Mono和Microsoft .NET的Java实现 框架。它包括以下组件:
- 以.NET实现的Java虚拟机
- Java类库的.NET实现支持Java和.NET的工具 互操作性
答案 2 :(得分:0)
如果你只有一些方法,你可能只是使用JNI并自己做而不是第三方工具(虽然我承认我不知道jni4net的细节)。请注意,我所涉及的项目必须做类似的事情(C# - > C / C ++ - > Java通过JNI),我们只有它的问题。问题主要是因为java api没有任何好的文档,所以可能是它的一部分。如果可能的话尝试将其保留为一种语言,但如果不可能,请确保进行大量错误检查。当应用程序崩溃时,很难找到问题(除非你拥有java和C#sutff)。只是我的0.02美元......
答案 3 :(得分:0)
避免二元耦合。根据本文中的体系结构方法编写自己的互操作层。 http://www.codeproject.com/KB/architecture/SerInterfaceXXsd2Code.aspx。 为了获得高性能,您还可以使用hessian替换本文中提到的XML序列化。