如何跟踪erlang中的子进程?
我有一个静态的“主机”列表及其信息,还有一个动态的“主机代理”列表。只要通过TCP连接连接到服务器,每个主机都只有一个代理。由于主机可能已连接,也可能未连接,其代理进程可能已启动,也可能未启动。当一个带有主机ID的TCP数据包到达时,我需要知道这个主机的“代理”是否启动了 连接负责从tcp套接字接收和发送数据,解析数据以确定它应该发送到哪个主机,并将数据传递给它的host agent进行处理 主机保存主机信息。Host agent处理传入数据,将主机信息保存到主机,并决定以何种格式发送内容(例如,使用主机id和响应代码向客户端发送确认) 在数据包中,它指定了源主机和目标主机,这意味着它由源主机发送,并且应该由目标主机接收。在这种情况下,目标主机可以在另一个连接中连接。这就是为什么所有连接都需要一个全局映射,以方便获取目标主机代理pid 我有一个监控树,如何跟踪erlang中的子进程?,erlang,child-process,erlang-supervisor,Erlang,Child Process,Erlang Supervisor,我有一个静态的“主机”列表及其信息,还有一个动态的“主机代理”列表。只要通过TCP连接连接到服务器,每个主机都只有一个代理。由于主机可能已连接,也可能未连接,其代理进程可能已启动,也可能未启动。当一个带有主机ID的TCP数据包到达时,我需要知道这个主机的“代理”是否启动了 连接负责从tcp套接字接收和发送数据,解析数据以确定它应该发送到哪个主机,并将数据传递给它的host agent进行处理 主机保存主机信息。Host agent处理传入数据,将主机信息保存到主机,并决定以何种格式发送内容(例如
host\u supervisor
监控所有主机
,connection\u supervisor
监控每个连接
,host\u agent\u supervisor
监控代理
host\u supervisor
,connection\u supervisor
都由应用程序监督员进行监督,这意味着它们是监督树中的一级子级。但是host\u agent\u supervisor
处于connection\u supervisor
下
问题:
为了获得主管的子进程列表,可以使用API。它获取对主管的引用,可以是其注册名或PID,并返回其子级的列表
supervisor:which_children(SupRef) -> [{Id, Child, Type, Modules}]
您的问题的简单或快速答案如下:
最后的评论,如果你还没有考虑过的话,你可以考虑看<代码> GPRC < /C>。它做这种事情
编辑/添加(以下问题编辑): 你的连接过程对我来说是多余的;如上所述,如果您将套接字提供给host agent,那么大部分责任都是 top_sup
|
.------------------------------.
| | |
map_server svc_listener hosts_sup (simple one to one)
|
.----------------------------->
| | | | | |