【问题标题】:Easiest form of process communication in ScalaScala 中最简单的进程通信形式
【发布时间】:2014-10-31 18:28:48
【问题描述】:

我想做的事:我想在 Scala 中为几个应用程序(即将成为 Java 的 jar 库)添加通信功能,并且我想以最轻松的方式完成它,没有 Tomcat、wars、GET 请求的路径、RPC 服务器等。

我做了什么:我一直在检查一些库,如 Jetty、JAX-RS、Jackson 等。但后来我看到了这些示例,它们通常涉及许多不同的文件夹配置、WSDL 文件等。大多数示例都缺少 main 方法,而且我不清楚它们可能有多少附加要求(例如 Tomcat)。

我打算做什么:我正在考虑在“服务器”上打开一个套接字进行侦听,然后与“客户端”连接并双向传输一些 JSON。这应该是相当标准的,以便我可以以兼容的方式使用其他编程语言(例如 Python)。

我在问什么:我想知道是否有一些库可以让这更容易。不一定要使用原始套接字,但只需几行就可以设置一些进程通信,可能不像 Node.js 那样简单,但类似。

奖励:很酷

  • 能够通过使用开放标准使用其他编程语言(例如 Python)
  • 有身份验证

但目前我真的不需要这些。

【问题讨论】:

    标签: scala sockets communication


    【解决方案1】:

    我认为你需要 RPC 客户端/服务器系统,我建议采取这两个之一:

    1. Finagle - 来自 Finagle 的超级灵活和强大的 RPC 客户端/服务器。您可以使用 Thrift 定义您的服务,它会在 scala 中为客户端/服务器生成存根。使用 Thrift,添加 Python 支持应该很简单。

    2. Spray - 更小的库,专注于创建 REST 服务。它没有 Finagle 强大,但更容易。 REST 允许您使用任何其他客户端

    3. Remotely - 一个优雅的 RPC 系统,适合理性的人。有趣且非常有前途的项目,但是由于大量使用 Scalaz+Shapeless+Macro 可能很难开始

    【讨论】:

      【解决方案2】:

      老实说,如果您想要跨语言兼容、简单、直接和简洁的东西,那么您不想使用普通的旧套接字!

      查看dropwizard。这太棒了,我将它用于小型和大型项目!它通常由不超过一个配置文件配置。也是supports authentication

      开箱即用,它通过 JSON(使用 Jackson)为您提供了非常棒的进程间通信等等。还有相当不错的Scala support for dropwizard

      如果您必须自己动手,那么我建议您使用 Jackson 进行 JSON 解析。它使用起来超级简单,而且scala support 也很棒。

      【讨论】:

        【解决方案3】:

        如果您有一个“受控”用例,其中客户端和服务器位于同一 LAN 上并串联部署,我会(有争议地)推荐 Java RMI;它是愚蠢的并且是特定于 JVM 的(并且使用特定于 Java 的协议),但是使用起来非常简单。

        如果您需要更强大和跨语言的功能,我建议您使用Apache Thrift。您使用独立于平台的接口定义语言编写接口,并且非常清楚哪些更改是兼容的,哪些不兼容; thrift 编译器生成骨架接口供您使用,然后您只需编写该接口的实现和几行代码即可启动服务器(从主页上的示例中可以看到)。如果您需要性能,它还可以很好地支持异步实现。 Thrift 本身是相当标准且跨平台的,具有自己的二进制协议,或者如果你真的想要,你可以使用 JSON 作为传输(但我不建议这样做)。

        【讨论】:

          【解决方案4】:

          RabbitMQ 提供了一种简单的方法来做你想做的事,而无需编写服务器并实现自己的持久性、流控制、身份验证等。你可以 brew 或 apt-get 安装它。

          • 您启动了一个代理守护进程(即管理消息队列)
          • 在 Scala 生产者中,您可以使用 Maven 提供的 Java API 将 JSON 字符串发送到指定队列,无需任何麻烦(例如,没有定义语言)
          • 然后在您的其他 Scala 程序中,连接到代理,侦听队列中的消息,并解析传入的 JSON

          因为它非常流行,所以网上有很多教程,您可以使用不同的模式来分发消息,例如发布/订阅、一对一、一次性交付等。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-24
            • 1970-01-01
            • 2012-06-20
            • 1970-01-01
            • 2019-04-20
            • 1970-01-01
            相关资源
            最近更新 更多