【问题标题】:Receiving TCP packets as messages instead of using gen_tcp:recv/2接收 TCP 数据包作为消息而不是使用 gen_tcp:recv/2
【发布时间】:2013-12-15 04:01:42
【问题描述】:

我正在用 Erlang 编写一个分布式聊天应用程序,以供我自己学习/受益。我有一个维护持久 TCP 连接的客户端和服务器。客户端使用 gen_tcp:connect/3 发起连接。服务器实际上分布在多个节点上。

gen_tcp 文档说:

可以使用 send/2 将数据包发送到返回的套接字 Socket。从对等端发送的数据包作为消息传递:

{tcp、套接字、数据}

因此,我的客户端能够接收服务器作为普通 Erlang 消息发送的任何数据。这对我的应用程序来说是可取的。

问题是我看不到任何方法可以使服务器上的连接以相同的方式运行。如果我的服务器可以接收作为 Erlang 消息发送的数据,我会很高兴的。这样,服务器可以在等待客户端发送消息的同时发送数据(即当聊天室中的另一个人发送消息时)。

有没有办法实现这种行为?

编辑:我知道 prim_inet:async_accept/2,但如果可能的话,我更喜欢记录在案的方法。

【问题讨论】:

    标签: sockets erlang gen-tcp


    【解决方案1】:

    使用选项 {active, once|true} 查看inet:setoptsGood article about

    【讨论】:

    • Active true 是打开套接字时的默认值。
    • 谢谢!这正是我所需要的。
    • @rvirding 我明确地将其设置为 false 不必要。感谢您指出这一点。
    猜你喜欢
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2013-07-04
    • 2012-09-27
    相关资源
    最近更新 更多