我有一台接受TCP连接的服务器(使用gen_tcp的gen_server),并且每个连接都会产生一个主管。该主管(由另一个更长久的主管监督)然后产生两个过程:特定于协议的处理程序和与数据库通信的客户端上下文。
协议处理程序从套接字获取TCP消息,并将它们转换为客户端上下文的消息。客户端上下文接收这些消息并与数据库进行对话,并返回协议处理程序转换为通过TCP(telnet,ssh,websockets,HTTP ...)使用的任何协议的消息,并将它们发送回客户端。
我想知道的是OTP行为适合于协议处理程序和客户端上下文进程。我可以滥用gen_server,但每个进程对有1个连接。 gen_fsm看起来可以用于协议处理程序,因为它经历了几个状态,但它对于客户端上下文来说非常不合适。我正在考虑客户端上下文的gen_event,但我一直认为这更适用于事件聚合器,而且它只处理来自单个源的事件。
随意告诉我,这完全是错误的方式,这是我第一次尝试在这个复杂的地方附近制作OTP应用程序。
答案 0 :(得分:2)
答案 1 :(得分:1)
我认为不需要使用主管来“分组”这两个过程。因此,TCP协议处理程序的单个管理程序(假设它们是单例),以及客户机上下文gen_server的simple_one_for_one。当收到新连接时,要求simple_one_for_one管理员创建新的客户端上下文gen_server。确保这两个进程知道彼此Pid,以便他们可以进行通信,并可能将它们链接起来以进行错误处理。