【问题标题】:How to guarantee message queue/order in Erlang?如何保证 Erlang 中的消息队列/顺序?
【发布时间】:2017-06-20 20:33:15
【问题描述】:

如果一台服务器使用 pid 接收来自一个进程的多个请求! Msg,但是每个请求的处理时间不一样,那如何保证发送方按顺序收到回复呢?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    来自the Erlang FAQ

    10.8 消息接收顺序是否有保证?

    是的,但仅限于一个进程内。

    如果有一个实时进程,并且您向它发送消息 A,然后发送消息 B,则可以保证如果消息 B 到达,则消息 A 在它之前到达。

    另一方面,假设进程 P、Q 和 R。P 将消息 A 发送给 Q,然后将消息 B 发送给 R。不能保证 A 在 B 之前到达。(如果分布式 Erlang这是必需的!)

    也就是说,如果服务器按照请求到达的顺序处理请求,并按照请求处理的顺序发送响应,那么发送方将按顺序接收响应。

    【讨论】:

      【解决方案2】:

      Erlang receive 子句可以进行模式匹配。因此,您可以为要接收的每条消息创建一个引用,然后对该引用进行模式匹配。

      查看gist 如果您查看第 26 行,您将看到接收子句正在等待具有特定 pid 的消息。在这种情况下,消息将以任意顺序到达,但凭借此接收,它们将按顺序排列。

      【讨论】:

        猜你喜欢
        • 2019-04-25
        • 2012-01-24
        • 2015-08-22
        • 2018-09-12
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        • 2014-06-22
        • 2011-06-14
        相关资源
        最近更新 更多