【问题标题】:Hosting non-JVM languages in a JVM application在 JVM 应用程序中托管非 JVM 语言
【发布时间】:2012-07-14 06:41:38
【问题描述】:

我正在寻找学习如何从 Java 托管其他语言的方向。到目前为止,我已经找到了 JSR 223 和 Bean Scripting Framework 之类的东西,但我的知识和经验不足以告诉我这些是否是合适的起点。

该应用程序是一个泥泞的地方,游戏系统作为连接(通过套接字)到基于 JVM 的服务器的服务运行。

理想情况下,我希望我的泥浆能够处理所有网络,因此我正在考虑编写一个小型网络模块,该模块可以加载任何语言或至少多种流行语言的代码。当有人想编写游戏模块时,他们会使用我的网络模块并将其与他们的代码打包在一起。在启动时,我的网络模块会加载他们的代码并与我的服务器对话。

例如,游戏开发者用 Lua 编写了一个战斗程序。我希望连接到我的服务器的网络程序通过“加载”它(以某种方式)来“托管”这个 Lua 代码。我不希望在我的 Java 程序中嵌入 Lua(Jython、JRuby 等也是如此),因为我寻求更通用的解决方案,但是我理解这是否不切实际。

我正在使用这种方法,以便开发人员可以用任何语言编写游戏系统。

我也考虑过诸如 Bridge RPC 之类的服务,但我更喜欢不依赖于特定供应商的解决方案。

【问题讨论】:

  • 定义“托管”。 JVM 可以托管任何具有 JVM 实现的语言。您可以使用任何支持 JVM 应用程序支持的任何机制的东西与 JVM 应用程序(通过套接字、消息传递和其他机制)交互。除此之外,你问的不是很清楚。
  • 比如说一个游戏开发者用 Lua 写了一个战斗程序。我希望连接到我的服务器的网络程序通过“加载”它(以某种方式)来“托管”这个 Lua 代码。我不希望在我的 Java 程序中嵌入 Lua(Jython、JRuby 等也是如此),因为我寻求更通用的解决方案,但是我理解这是否不切实际。我将相应地编辑我的问题。

标签: java networking messaging rpc mud


【解决方案1】:

除非您希望您的有线协议非常复杂,否则我建议您:

  1. 大量记录有线协议
  2. 提供一个简单的开源、基于 java 的客户端参考库

因此,客户端开发人员既可以在 Java 程序中使用您的库,也可以用另一种语言编写自己的版本。拥有文档化的协议和参考库应该足以让任何开发人员用他们选择的语言重新实现。

【讨论】:

  • 2a) 确保库仅包含解析部分而不包含连接部分。
【解决方案2】:

一些选项:

  • 为了获得良好的性能,我建议使用二进制格式:类似于 Google 的 Protocol Buffers
  • 对于一般的灵活性和许多不同的语言实现可能值得关注Apache Thrift
  • 实现您自己的 REST 或基于文本的服务也是可行的。您可以考虑使用 JSON 作为消息格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多