`
被触发
  • 浏览: 34950 次
文章分类
社区版块
存档分类
最新评论

LINUX环境并发服务器的三种实现模型

 
阅读更多
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1  循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服务器在同一时刻可以响应多个客户端的请求
1.1 UDP循环服务器的实现方法:
UDP循环服务器每次从套接字上读取一个客户端的请求->处理->然后将结果返回给客户机。
因为UDP是非面向连接的,没有一个客户端可以老是占住服务端。只要处理过程不是死循环,服务器对于每一个客户机的请求总是能够满足。
UDP循环服务器模型为:
socket(...);
bind(...);
while(1)
{
   recvfrom(...);
   process(...);
   sendto(...);
}
1.2 TCP循环服务器的实现方法
TCP循环服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接。TCP循环服务器一次只能处理一个客户端的请求,只有在这个客户的所有请求满足后,服务器才可以继续后面的请求。如果有一个客户端占住服务器不放时,其它的客户机都不能工作了,因此,TCP服务器一般很少用循环服务器模型的。
TCP循环服务器模型为:
socket(...);
bind(...);
listen(...);
while(1)
{
   accept(...);
   process(...);
   close(...);
}

2 三种并发服务器实现方法
一个好的服务器,一般都是并发服务器。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。
2.1 多进程并发服务器
在Linux环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时 ,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时 ,服务器能及时处理客户 ,特别是在客户服务器交互系统中。对于一个 TCP服务器,客户与服务器的连接可能并不马上关闭 ,可能会等到客户提交某些数据后再关闭 ,这段时间服务器端的进程会阻塞 ,所以这时操作系统可能调度其它客户服务进程。比起循环服务器大大提高了服务性能。
TCP多进程并发服务器
TCP并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理。
socket(...);
bind(...);
listen(...);
while(1)
{
   accpet(...);
   if(fork(...) == 0)
   {
    process(...);
    close(...);
    exit(...);
   }
   close(...);
}
2.2多线程服务器
多线程服务器是对多进程的服务器的改进 ,由于多进程服务器在创建进程时要消耗较大的系统资源 ,所以用线程来取代进程 ,这样服务处理程序可以较快的创建。据统计 ,创建线程与创建进程要快 10100 倍 ,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程共享相同的全局内存、全局变量等信息。这种机制又带来了同步问题。以下是多线程服务器模板:
socket(...);
bind(...);
listen(...);
while(1)
{
   accpet(...);
   if((pthread_create(...))!==-1)
   {
     process(...);
     close(...);
     exit(...);
   }
   close(...);
}
2.3 I/O复用服务器
I/ O复用技术是为了解决进程或线程阻塞到某个 I/ O系统调用而出现的技术 ,使进程不阻塞于某个特定的I/ O系统调用。它也可用于并发服务器的设计,常用函数select 或 poll来实现。
socket(...);
bind(...);
listen(...);
while(1)
{
  if(select(...)>0)
   if(FD_ISSET(...)>0)
        {
accpet(...);
            process(...);
}
   close(...);
}

以上都是TCP服务器端的程序,TCP客户端的程序可以通用:

socket(...);
connect(...);
listen(...);
process(...);
close(...);
分享到:
评论

相关推荐

    LINUX环境并发服务器的实现模型

    在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。 目前最常用的服务器模型有: ...•并发服务器:服务器在同一时刻可以响应多个客户端的请求

    并发服务器的三种实现模型测试代码

    Linux 网络编程——并发服务器的三种实现模型,相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45671215

    (牛客网C++课程)Linux 高并发Web服务器项目实战(带定时检测代码)

    (牛客网C++课程)Linux 高并发Web服务器项目实战(带定时检测代码) 技术框架: 1. 线程池 + 非阻塞 socket + epoll + 事件处理的并发模型 2. 状态机解析HTTP请求 3. 心跳机制 4. 简易日志系统 主要内容: 1. ...

    Linux下tcp并发服务器的几种设计的模式套路

    本文详细介绍了 Linux下tcp并发服务器的几种设计的模式套路,包含差异等比较,实例等 具体有 1,单进程,单线程模式,2,多进程模式,…… 相信看了一定受用!

    webserver(1)_linux高并发服务器_源码

    这是一个高并发的linux服务器,模拟的Preactor模式,使用epoll的LT模型

    基于主动队列管理的Linux并发服务器模型及负载均衡算法的研究.pdf

    基于主动队列管理的Linux并发服务器模型及负载均衡算法的研究.pdf

    epoll 的并发服务器

    linux 下的 用 epoll 开发的 并发服务器 模型

    linux下socket编程之以select方式实现并发服务器

    在linux下的socket编程服务器模型之多路复用I/O,源码经过本人编译,测试,绝对能正确运行。

    Linux 多线程服务器设计 LinuxC编程一站式学习.pdf

    LinuxC编程一站式学习.pdf unix程序员手册.pdf 多线程服务器的常用编程模型.pdf 网络编程模型综述.doc 高性能高并发服务器架构.rar Linux环境并发服务器设计技术研究.pdf 应用SELECT模型实现TCP并发服务器.pdf ...

    基于Linux的web服务器

    项目是在Linux下以C++开发语言搭建的Web服务器,服务器可以支持相对数量的客户端并发和及时响应,该项目支持用户注册、登录,访问图片和视频。1.利用IO多路复用技术Epoll与线程池实现Reactor高并发模型。 2.利用主从...

    多进程并发服务器设计

    Linux环境下应用进程和Socket套接字设计并发服务器,完成多用户聊天应用程序,本文档给出了系统设计模型、进程通信接口。

    基于Linux的网络通信模型的设计与实现

    为了提高多用户下服务器的通信效率,本文采用多进程并发模型,并使用 socket 套接字来实现网络通信,同时通过对防火墙的设计在 Linux 下实现全程动态包过滤,提高 网络传输安全性,更好地发挥了 Linux 的实时性,并且保障...

    Linux高性能服务器编程

    8.1 服务器模型 8.1.1 CS模型 8.1.2 P2P模型 8.2 服务器编程框架 8.3 IO模型 8.4 两种高效的事件处理模式 8.4.1 Reactor模式 8.4.2 Proactor模式 8.4.3 模拟Proactor模式 8.5 两种高效的并发模式 ...

    基于Linux的多线程池并发Web服务器设计

    时至今日,Web服务已...文中利用信号量机制和生产者一消费者模型,设计基于多线程池并发Web服务器能够更高效的实现资源调度与共享。文中最后的测试结果表明,设计实现的Web服务器具有更强的并发处理能力和服务效率。

    C语言实现的支持高并发、超高性能Web服务器源码.rar

    C语言实现的支持高并发、超高性能Web服务器源码,可以编译运行,使用高性能HTTP解析器fasterhttp作为其解析核心,在开启Keep-Alive和gzip压缩时(现代浏览器默认开启)性能比nginx约快3倍。 hetao功能: * 支持主流...

    MyWebServer:linux下用c ++实现的可支持上万并发的web服务器

    一个linux系统下的C ++轻量级Web服务器,进行学习和实践网络编程。经测试支持上万并发连接。 C / C ++ B / S模型 React器事件处理模式 ET模式非双边IO的epoll 半同步/半React堆螺纹池 时间轮实现的定时器处理非...

    C++从0实现百万并发Reactor服务器完结13章下载

    reactor是一种设计模式, 是服务器的重要模型, 是一种事件驱动的反应堆模式, 高效的事件处理模型。 reactor 反应堆: 事件来了才执行,事件类型可能不尽相同,所以我们需要提前注册好不同的事件处理函数。事件到来就...

    论文研究-LINUX平台下基于EPOLL的FTP服务器设计与实现 .pdf

    LINUX平台下基于EPOLL的FTP服务器设计与实现,王亚昌,,网络服务器通常采用多进程、多线程并发机制或者是基于select/poll的I/O复用模型实现,传统的FTP服务器大都使用前者。本文针对Linux 2.6内�

    基于Linux的预线程化并发Web服务器设计 (2012年)

    文中设计的基于预线程化的并发Web服务器利用信号量机制和生产者-消费者模型较好的实现了资源共享及其调度,利用线程的逻辑缓冲流有效节省地址空间.该Web服务器具备了常用Web服务器的基本功能,具有并发处理能力,可以...

    Select 服务器模型标准代码

    select模型是网络编程里面一个非常基础的并发模型,它适合windows,linux和嵌入式tcp/ip协议栈,这个代码是我自己编写的select服务器模型,可以作为标准模板使用

Global site tag (gtag.js) - Google Analytics