【问题标题】:Accessing socket from two processes从两个进程访问套接字
【发布时间】:2017-07-04 17:23:40
【问题描述】:

在 Erlang 中是否允许一个进程读取而另一个进程写入套接字? 我已经尝试过了,它似乎可以工作,但我想知道它是否万无一失。

【问题讨论】:

  • 谢谢大家的回答。 Summa summarum:多个进程写入是安全的,但只有一个进程可以从套接字读取。

标签: erlang


【解决方案1】:

根据我从源代码中的理解,(至少是 gen_tcp)套接字发送/接收归结为用于发送的 erlang:port_command 和用于套接字端口上的接收的 erlang:port_control(参见 prim_inet.erl )。

对于port_command:“如果端口忙,调用进程将暂停,直到端口不再忙。” port_control 也是一个同步操作。

如果我错了,请纠正我,但使用多个进程读取和写入套接字似乎是完全安全的。

【讨论】:

  • 一个评论是,如果“拥有”进程死亡,那么套接字将关闭。所以这两个进程之间的使用不是对称的。
【解决方案2】:

我很确定我记得这样做没有任何问题。

【讨论】:

    【解决方案3】:

    他们中的任何人都可以写,但如果你的所有进程都可以接收,那就没有意义了。它会溢出所有不期待消息的邮箱。您只需要定义一个Pid来接收数据包,默认情况下它是创建套接字的任何Pid。您可以通过设置控制进程来设置任何Pid来控制套接字。

    【讨论】:

    • 如果使用 {active, false} 和 recv() 从套接字获取数据会怎样?虽然我不确定,但我希望有几个进程可以分别调用 recv(),这样可以正常工作。
    • 这是真的。我很难想象在不同进程调用 recv 的套接字周围传递。最好激活并有一个专用循环接收 {tcp,Sock,Data}。至少这就是我习惯与他们合作的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    相关资源
    最近更新 更多