将TCP数据包作为消息接收,而不是使用gen_tcp:recv / 2

时间:2013-11-29 02:46:26

标签: sockets erlang gen-tcp

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

gen_tcp文档说:

  

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

     

{tcp,Socket,Data}

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

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

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

编辑:我知道prim_inet:async_accept / 2,但如果可能的话,我更愿意采用文档化的方法。

1 个答案:

答案 0 :(得分:2)

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