http://www.cnblogs.com/wolflion/archive/2011/07/13/2539138.html

迭代服务器比较原始,它的原型可以描述成:

while(1)
{
new_fd = 服务器accept客户端的连接(new_fd = accept(listenfd, XX, XX))
逻辑处理
在这个new_fd上给客户端发送消息
关闭new_fd
}
也就是说,这个进程是一个一个处理各个客户端发来的连接的,比如一个客户端发来一个连接,那么只要它还没有完成自己的任务,那么它就一直会占用服务器的进程直到处理完毕后服务器关闭掉这个socket。
并发服务器是最经常用的:
1 while(1)
2 {
3 new_fd = 服务器accept客户端的连接
4 if(是子进程)
5 {
6 首先关闭掉监听fd // 因为子进程并不需要监听,它只负责处理逻辑并发消息给客户端
7 处理逻辑发送消息
8 关闭new_fd
9 关闭进程
10 }
11 关闭new_fd
12 }
这样每来一个客户端,服务器就克隆一个自己去处理请求,这样主进程就一直处于监听状态而不会被阻塞
额,我想讲的重点不是这里,重点是代码第12行!
1。千万不要以为fork出来一个子进程就产生了2个新的socket描述符,实际上子进程和父进程是共享linten_fd和new_fd的,当父进程关闭new_fd的时候(代码第12行)它只是把这个new_fd的访问计数值减了1而已,由于访问计数值还 > 0(因为还有客户端的new_fd连着呢),所以它并没有断开和客户端的连接。
2。如果我们不写第12行会有什么后果,第一,因为可分配的socket描述符是有限的,如果分配了以后不释放,也就是不能回收再利用,也就是总有描述符耗尽的一天。第二,本来把和客户端连接的任务交给子进程以后父进程就可以继续监听并accept下个连接了,但如果父进程不关闭自己跟客户的连接,意思就是这个连接居然永远存在!相当于每来一个客户这个父进程就连一个客户并且连接不断,你应该知道后果了吧。

转载于:https://www.cnblogs.com/johnnyflute/p/3800978.html

初步认识迭代服务器和并发服务器相关推荐

  1. linux C语言TCP协议实现镜像服务器,并发服务器,文件传输

    镜像服务器 返回连接者的ip端口回去: #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include & ...

  2. C++网络编程(四):多进程并发服务器

    部分内容转自Linux并发服务器编程之多进程并发服务器. 目录 前言 创建进程 Linux下的进程 进程创建函数fork与vfork exec函数 使用fork函数实现多进程并发服务器 分割I/O程序 ...

  3. C++项目实战-高并发服务器详析

    本节中的socket一套函数用的是之前封装过了的,进行异常处理(可自取) 链接: C++项目实战-socket编程_干饭小白的博客-CSDN博客 目录 BIO模型 NIO模型 多进程并发服务器 多线程 ...

  4. Linux 并发服务器雏形总结

    如下介绍一个并发回射客户端/服务器的雏形,所谓回射:就是客户端输入一条数据,服务器端读取并显示,然后服务器端再把刚读取的信息发送回客户端进行显示.示意图如下: 所谓并发服务器:就是一个服务器可以同时为 ...

  5. 【Linux网络编程】并发服务器的三种实现模型

    服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有循环服务器和并发服务器. 循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器(多 ...

  6. linux网络编程之并发服务器的三种实现模型 (超级经典)

    转载 : http://blog.csdn.net/tennysonsky/article/details/45671215 服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器 ...

  7. linux msgrcv阻塞接收_linux下高并发服务器实现

    在做网络服务的时候tcp并发服务端程序的编写必不可少.tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处.下面就简单的讨论下这几种模式的差异: 单进程,单线程 在accept之后,就 ...

  8. Linux网络编程——tcp并发服务器(多进程)

    https://blog.csdn.net/lianghe_work/article/details/46503895 一.tcp并发服务器概述 一个好的服务器,一般都是并发服务器(同一时刻可以响应多 ...

  9. linux网络编程(二)高并发服务器

    linux网络编程(二)高并发服务器 错误处理 高并发服务器 多进程并发服务器 客户端 错误处理 #include "wrap.h"int Bind(int fd, const s ...

最新文章

  1. 使用Xmanager远程连接Linux RedHat 6.4图形桌面
  2. spring源码阅读(3)-- 容器启动之BeanFactoryPostProcessor
  3. PHP 验证码   高洛峰 细说PHP
  4. linux dd命令制作软盘,制作Linux启动软盘的四种方法
  5. Python学习_4_if_while_for
  6. ssis sql_如何在SSIS中使用SQL随机数
  7. 优化案例--改写IN条件为INNER JOIN
  8. LaTex字体、符号汇总
  9. open cv python_Open CV非常牛逼!众所周知!今天就来见识一下它究竟有多牛逼!
  10. OPPO R9s成为情侣最喜欢礼物,今年情人节就送它了!
  11. java王者荣耀英雄代码_王者荣耀英雄代码大全
  12. 视频编码格式转换软件:compressor for mac中文版
  13. Python项目(Django):国内新冠肺炎疫情大数据可视化平台
  14. 苹果手机屏幕镜像_微软应用上线屏幕镜像功能:可在PC端控制安卓手机
  15. 苹果电脑QQ邮件服务器,苹果邮件设置qq邮箱的步骤_苹果电脑自带邮件怎么设置qq邮箱-win7之家...
  16. 【Java】:基础入门知识
  17. 如何将纯色背景的图片转换为背景透明的图片
  18. cf 581B-------Luxurious Houses
  19. Live800:在线客服系统排名是怎么样的?
  20. 海思对接索尼ECX334 RGB OLED屏总结

热门文章

  1. python局域网大文件_[源码]Python简易http服务器(内网渗透大文件传输含下载命令)...
  2. 十三、Vuex学习笔记
  3. 二、数据预处理——缺失值处理
  4. TensorFlow 2.0 - Hub 模型复用
  5. LeetCode 1177. 构建回文串检测(前缀和)
  6. LintCode 1753. 写作业(二分查找)
  7. c# 定位内存快速增长_改善C#程序,提高程序运行效率的50种方法
  8. python编程制作接金币游戏,闪电侠接金币的FlashMan类
  9. python遍历文件夹下所有文件名中含有指定_Python 遍历目录找出包含指定字符串的文件夹...
  10. python 动漫卡通人物图片大全_用Python把人物头像动漫化,不同的表情给你不同的惊喜...