返回介绍

为每个客户端 fork() 一个子进程

发布于 2024-10-10 23:21:39 字数 1939 浏览 0 评论 0 收藏 0

客户端连到服务器以后会启用一个新创建的套接字对话,也就是说主服务器套接字可以去找下一个客户端,我们来试试。

当客户端连接时,可以用

fork() 克隆一个独立的子进程来处理它和服务器之间的对话。

当客户端在与子进程通信时,服务器的父进程可以继续连接下一个客户端。

父子进程使用不同套接字

有一件事你必须铭记于心,服务器的父进程只需要用主监听套接字(用来接受新的连接),而子进程只需要处理 accpet() 创建的副套接字。也就是说,父进程克隆出子进程后可以关闭副套接字,而子进程可以关闭主监听套接字。

这里没有蠢问题问:如果为每个客户端都创建新进程,那么当有无数客户端连接服务器时计算机上岂不是会有无数进程?答:是的,如果你觉得会有很多客户端连接服务器,就需要控制创建进程的上限。子进程在处理完一个客户端后可以向你发出信号,利用这点就可以用有限的子进程处理无限的客户端。

 

磨笔上阵

我们修改了服务器的代码,现在它能克隆独立的子进程来和客户端通信……眼看就要完成了,你能找到漏掉的代码吗?

 

磨笔上阵解答

我们已经修改了服务器的代码,现在它能克隆独立的子进程来和客户端通信……眼看就要完成,你将找出漏掉的代码。

试驾

试试修改后的服务器,你可以像刚刚一样编译运行。

打开另一个控制台,启动 telnet,像刚才一样连接:

看起来没什么区别,但只要你让客户端在笑话讲到一半的时候停在那里,就能看到修改后的效果:

假如你打开第三个控制台,就可以看到服务器现在有两个进程:一父一子:

即使第一个客户端还在和服务器通信,你仍然可以连接服务器:

你已经创建了一个互联网服务器,下面就来看看如何创建客户端,我们来写一个可以读取网页内容的程序。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文