【问题标题】:data passing over tcp between erlang and nodejs在 erlang 和 nodejs 之间通过 tcp 传递数据
【发布时间】:2013-06-03 19:04:21
【问题描述】:

我需要通过 tcp 在 nodejs 和 erlang 进程之间传递数据。 Erlang 进程是一种 api 服务器,它从 nodejs 进程接收数据并进行一些处理。

我想使用 json 作为数据结构,并使用 ejson 来编码/解码消息。但是,在进行基准测试时,我发现解码非常慢。大约 20k 信息/秒。

有没有更好或更快的方法通过 tcp 向 erlang 发送数据。有没有办法让我可以在 erlang 中跳过这个解码过程。

目前数据属于这种类型:

{ “事件”:“某些事件”, “频道”:“某个频道”, }

erlang会根据事件和通道做一些处理。

【问题讨论】:

  • 为什么你认为这很慢?你用了多少进程?您的基准测试的详细信息是什么?你真的需要超过 20k msg/sec 吗?
  • 我需要超过 40k msg/sec。现在我正在使用单个进程,但现在我意识到将其委托给多个进程将为我们提供水平缩放。所以我现在计划使用多个进程进行解析的循环法。

标签: node.js tcp erlang


【解决方案1】:

您应该查看msgpack。它体积小、速度快,并且具有为多种语言(包括 erlang 和 javascript)构建的库。

我在多个项目中使用过它,并且对其速度和易用性感到满意。

【讨论】:

    【解决方案2】:

    我会使用thrift。在 erlang 中实现 thrift 服务器非常简单。从example 看来,用 javascript 实现客户端也很简单。

    【讨论】:

      【解决方案3】:

      也许是协议缓冲区?

      或者只发送 2 行终止的字符串并使用普通的旧 tcp 套接字怎么样。 您可以使用 inets setopts 将数据包类型设置为行。然后,如果您将套接字激活一次,则拥有该套接字的进程将一一收到发送消息。 或者您可以使用被动模式,在其中显式调用 recv,它仍然会逐行提供数据(小心比缓冲区长的行)。

      【讨论】:

        【解决方案4】:

        您可以尝试其他 json libs for erlang,或尝试使用bert 进行序列化

        【讨论】:

        • 是的,bert 是一个不错的选择,但是在 nodejs 中使用 bert 编码数据很痛苦。我将使用多个进程来分担解析的负载。谢谢:)
        猜你喜欢
        • 2018-02-07
        • 2019-03-24
        • 1970-01-01
        • 2019-03-12
        • 2019-06-04
        • 2013-08-14
        • 2021-09-08
        • 1970-01-01
        • 2016-12-09
        相关资源
        最近更新 更多