从套接字和另一个 Erlang 进程接收

receive from a socket and also from another Erlang process

在 Erlang 进程中,我如何从 ssl 套接字接收,同时使用接收原语从另一个 erlang 进程接收?

这个想法是将来自套接字的内容转发到另一个进程;和向后。

到目前为止,我唯一的选择是使用一些时间从每一端接收,然后切换。当然,这会延迟在一个接口上接收到的消息的处理,同时从另一个接口接收消息。你有没有其他方法可以做到这一点?如果只有 Erlang 会让我使用一个进程从套接字接收,另一个进程发送到套接字...


不确定我是否理解您的问题;无论如何,您可以在接收语句中包含多个"子句",因此当从任一方接收某些内容时它会变为"未阻塞":

1
2
3
4
5
6
7
8
9
loop() ->
  receive
    {ssl, Msg} ->  % incoming msg from SSL, send it to process
      Proc ! Msg,
      loop();
    {proc, Msg} -> % incoming msg from process, send it to SSL
      SSL ! Msg,
      loop()
  end.

重要的是,您需要以一种可以区分 SSL 和使用模式匹配处理消息的方式来格式化您的消息。


无论如何,您将通过 receive 语句在进程中从(例如)HTTP_Client 接收消息。您将能够轻松地描述"对话":

{http, {RequestId, Result}} 用于 HTTP_Client "conversations"

查看这里了解更多详情。