【问题标题】:What is the best way to work with akka from nodejs从 nodejs 使用 akka 的最佳方法是什么
【发布时间】:2015-06-06 21:51:16
【问题描述】:

我有一个应用程序前端,在 angularjs + nodejs + express + socket.io 上实现。单独的服务中还有一个功能。这个服务是写在akka上的。

这是整个通信管道的外观:

[用户输入值] -> [angularjs 获取值并通过 socket.io 将其发送到 nodejs 服务器] -> [nodejs 接收值并将其引导至 akka] -> [akka 执行一些计算并返回响应] -> [nodejs 接收响应并将其引导至 angularapp] .

一种可能的解决方案是引入一个 MQ 中间件并将其用于交互,但这种“消息驱动的方法”对于看起来像 RPC 调用的东西来说似乎是一种开销。在 nodejs 和 akka 之间建立这种类型的通信的最佳方式是什么?

【问题讨论】:

  • 你可以使用 edge.js 和 akka.net
  • 我不明白你在问什么。如果消息通过 socket.io 来自客户端,那么您只需在服务器端 socket.io 代码中定义消息处理程序,然后在收到发往该服务的消息时适当地调用您的 akka 服务。那是与您似乎选择的架构一致的方法。当然,如果 nodejs 在这些数据中根本没有真正发挥作用,没有什么说你必须通过 nodejs 来做到这一点。浏览器可以通过 socket.io 或 ajax 通过不同的端口直接与您的服务通信。
  • @jfriend00 没错。问题是如何调用akka。我立即想到的一种方法是简单地将消息发布到某个 MQ 并最终从另一个队列中获得响应,但这似乎并不有效——因为我们必须定义两个队列来执行请求 /回应....还有其他更有效的方法吗?

标签: node.js scala express akka


【解决方案1】:

由于 Akka speaks HTTP 本身,您可以从 Node 对 Akka 服务进行 RESTful 调用。支持流水线,因此您可以使其非常高效。在 Akka HTTP 服务器流程中,您使用 ask 模式从您的 actor 获取计算值。

【讨论】:

  • 听起来是个好主意。谢谢
  • 你好罗兰。你说的流水线是什么意思?这个解决方案对编组/解组 http 请求没有性能损失吗?谢谢!
【解决方案2】:

最干净的方法是跳过消息层的node.js/socket.io,而是直接在spray.io 上使用websockets。 Typesafe 有一个激活器模板,仅适用于 akka actor 的 websockets 场景:Spray and Websocket interfaces to actors

否则你会看到某种 RPC 中间件,可能是 ThriftZeroMQ

【讨论】:

    猜你喜欢
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多