我对 erlang/otp 世界还很陌生,所以我想这是一个非常基本的问题。不过,我想知道执行以下操作的正确方法是什么。
目前,我有一个高级主管的申请。后者将监督调用 gen_tcp:accept 的工作人员(睡在上面),然后为每个接受的连接生成一个进程。注意:对于这个问题,listen() 在哪里完成是无关紧要的。
我的问题是关于使这些工作人员(在 gen_tcp:accept 上睡觉的工作人员)尊重 otp 设计原则的正确方法,以便他们可以处理系统消息(处理关闭、跟踪等),根据什么我在这里读过:http ://www.erlang.org/doc/design_principles/spec_proc.html
所以,
- 是否可以为此使用 gen_fsm 或 gen_server 等可用行为之一?我的猜测是否定的,因为阻塞调用 gen_tcp:accept/1。是否仍然可以通过指定接受超时来做到这一点?如果是这样,我应该把 accept() 调用放在哪里?
- 或者我应该像上面链接中的示例一样从头开始编码(即:不使用现有行为)?在这种情况下,我想到了一个调用 gen_tcp:accept/2 而不是 gen_tcp:accept/1 的主循环(即:指定超时),然后立即编写一个接收块,这样我就可以处理系统消息。这是正确的/可以接受的吗?
提前致谢 :)