使用socket编程时fork
Fork when using socket programming
我在使用套接字时无法理解 fork。我知道 fork 是为了让你可以同时处理多个客户端,但是我不确定它是否应该在以下场景中使用:
我正在创建 P2P 服务器的模拟。我必须有一个跟踪器和一个同伴。跟踪器处理来自所有对等点的连接。当对等点第一次连接到跟踪器时,它会向跟踪器发送其文件列表,然后跟踪器将所有文件保存在一个集合中(包括 ip 地址)(该集合包含来自所有对等点的文件)。此外,如果对等点退出,则跟踪器会从集合中删除该对等点的文件(包含其 IP 地址的文件)。如果跟踪器收到 "get files" 命令,它将向任何对等方发送整个文件列表。
这里我不明白如何使用 fork(或者如果有必要的话),因为如果我使用 fork,那么当客户端退出时,我将从列表中删除它的文件,但是因为它在它自己的进程,如何在子进程之外更改列表?
要么使用单个进程(使用线程或围绕发现函数的循环,如 select
或 poll
),要么使用某种方式跨进程同步信息,例如文件、数据库, 或共享内存。
我在使用套接字时无法理解 fork。我知道 fork 是为了让你可以同时处理多个客户端,但是我不确定它是否应该在以下场景中使用:
我正在创建 P2P 服务器的模拟。我必须有一个跟踪器和一个同伴。跟踪器处理来自所有对等点的连接。当对等点第一次连接到跟踪器时,它会向跟踪器发送其文件列表,然后跟踪器将所有文件保存在一个集合中(包括 ip 地址)(该集合包含来自所有对等点的文件)。此外,如果对等点退出,则跟踪器会从集合中删除该对等点的文件(包含其 IP 地址的文件)。如果跟踪器收到 "get files" 命令,它将向任何对等方发送整个文件列表。
这里我不明白如何使用 fork(或者如果有必要的话),因为如果我使用 fork,那么当客户端退出时,我将从列表中删除它的文件,但是因为它在它自己的进程,如何在子进程之外更改列表?
要么使用单个进程(使用线程或围绕发现函数的循环,如 select
或 poll
),要么使用某种方式跨进程同步信息,例如文件、数据库, 或共享内存。