使用OTP原则的非阻塞TCP服务器

rpk*_*lly 8 erlang tcp erlang-otp

我开始学习Erlang了,所以我想写下"你好,世界!" 并发编程,一个IRC机器人.

我已经使用Erlang编写了一个没有任何OTP细节(主管,应用程序等行为).我想用OTP原理重写它,但不幸的是我无法弄清楚使用OTP进行套接字编程的"正确"方法.

似乎唯一合理的方法是手动创建另一个进程并将其链接到主管,但肯定有人在某个地方之前已经这样做了.

Ali*_*lin 4

我认为这就是您正在寻找的内容: http://www.trapexit.org/Building_a_Non-blocking_TCP_server_using_OTP_principles 这是关于如何使用 OTP 构建非阻塞 TCP 服务器的完整教程(当然,有完整的文档和解释) 。

  • 不,使用未记录的(并且可能不稳定的)prim_inet:async_accept/2。也许没有“OTP 方式”来做到这一点:/ (4认同)
  • 在这种情况下,我只需使用 gen_tcp:accept/1 和 gen_tcp:controlling_process/2 (如文档所示:“将新的控制进程 Pid 分配给套接字。控制进程是从套接字接收消息的进程。如果调用由当前控制进程之外的任何其他进程返回 {error, eperm}。”)。这是如何使用它的示例:http://20bits.com/articles/erlang-a-generalized-tcp-server/(请注意以下段落:“使用 gen_server 实现网络服务器的问题是调用to gen_tcp:accept ...”。希望这会有所帮助。 (2认同)