如何保证Erlang中的消息队列/顺序?

时间:2017-06-06 13:35:12

标签: erlang

如果一台服务器使用pid从一个进程收到多个请求! Msg,但每个请求的处理时间不同,那么如何保证发件人按顺序收到回复?

2 个答案:

答案 0 :(得分:5)

来自the Erlang FAQ

  

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

     

是的,但只在一个过程中。

     

如果有实时流程并且您发送消息A然后消息B,则保证如果消息B到达,则消息A到达它之前。

     

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

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

答案 1 :(得分:0)

the Erlang receive clause can do pattern matching. So what you can do is create a reference for each message that you want to receive and then pattern match on that reference.

Check out this gist if you look at line 26 you will see that the receive clause is waiting for a message with a specific pid. In this case the messages will arrive in an arbitrary order but by virtue of this receive, they will be put into order.