我有一个接受 TCP 连接的服务器(使用 gen_tcp 的 gen_server),并且对于每个连接,它都会生成一个主管。该主管(由另一个更永久的主管监督)然后产生两个进程:一个特定于协议的处理程序和一个与数据库对话的客户端上下文。
协议处理程序从套接字获取 TCP 消息并将它们转换为客户端上下文的消息。客户端上下文获取这些消息并与数据库对话并返回消息,协议处理程序将其转换为它通过 TCP 使用的任何协议(telnet、ssh、websockets、HTTP ...)并将它们发送回客户端。
我想知道的是哪些 OTP 行为适合协议处理程序和客户端上下文进程。我可以滥用 gen_server,但它是每个进程对 1 个连接。gen_fsm 看起来它可以用于协议处理程序,因为它经历了几个状态,但它非常不适合客户端上下文。我正在考虑 gen_event 用于客户端上下文,但我被引导相信它更多地用于事件聚合器,并且这只处理来自单一来源的事件。
随意告诉我,我的做法完全错误,这是我第一次尝试在这个复杂的任何地方制作 OTP 应用程序。