服务器模式

  服务器开发貌似有固定的模式,性能和复杂度各异,现总结下常见的模式。当然服务器的开发并没有固定的模式,除了以下总结的外,实际根据业务的不同,生产中还用过其他模式。

    1. 阻塞式服务器
      主要特点:一个连接上来,等服务完毕后,才释放连接,在服务过程中,不能接收其他连接。一般而言此类服务的socket一般是阻塞的。此类服务器一般性能比较低的,基本上生产上不会用这种模式,只有在学习或做一些简单的测试才会使用这些模式。
    2. 迭代式服务器
      主要特点:一个连接上来,fork一个进程或创建一个线程进行服务,在一个服务的过程中,可以同时服务多个连接。一般来说,此类服务socket一般也是阻塞的。此类服务一般性能会比阻塞式服务器高很多,也有很多公司用这种模式,比如kugou的服务端。如果连接数比较大,C10K问题就非常明显,随着连接数的增加,性能剧烈下降。而且如果基本上是短连接的话,主动关闭会出现大量的TIMEWAIT或CLOSINGWAIT状态。
    3. 资源池的服务器 主要特点:预先启动一定数量的线程或进程,启动的数量根据实际的情况启动。每个连接来时,分配到空闲的线程或进程,也可以根据实际情况一个线程或进程处理多个连接业务,当无法找到空闲进程或线程时,可以动态增加线程或进程,socket可以是阻塞或非阻塞的。这类服务器需要预先估计服务器的承载能力。也有比较多的公司使用这种模式。当然会根据实际情况进行一些变化,比如说在服务器接一个前端,将前端的报文分发到消息队列,多个进程或线程竞争抢着处理。但本质上就是资源池的概念。nginx 貌似也是这种模式的,nginx还有一个先进的地方是多个进程同时linsten一个fd,linux是允许多个进程同时监听一个端口的,当一个进程accept成功时,其他进程accept也会返回,这是群惊效应。自己很多年前也曾实现类似的服务器框架。jmm
    4. 非阻塞无状态服务器
      主要特点:一般都是单进程,采用epoll多路服务,对于动态数据,一般存在redis或一些分布是缓存中。一个进程可以接受多个连接,同时服务。当遇到性能瓶颈时,可以随便增加进程。一般这类服务器前端还可能接负责均衡器。现在一般都用这模式进行开发,性能比较可观,而且扩展非常方便。
        1. http://luoguochun.cn/2014/06/25/server-mode/

服务器模式,布布扣,bubuko.com

时间: 2024-08-05 19:34:27

服务器模式的相关文章

AppStore与GooglePlay游戏安全支付服务器模式详细流程

AppStore与GooglePlay游戏安全支付服务器模式详细流程 整体拓扑架构图见:http://www.cnblogs.com/legendstudio/p/4917617.html

MySQL学习笔记—SQL服务器模式汇总

MySQL学习笔记-SQL服务器模式汇总 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用–sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(–sql-mode ="&q

SQL服务器模式

SQL服务器模式 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用--sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(--sql-mode =""). 你还可

Quartz.NET学习系列(十一)--- Quartz.NET持久化及客户端服务器模式

持久化         Quartz.NET如果不进行数据库相关配置,则默认的执行模式为内存模式,优点是执行速度快,确定就是数据无法存储,宕机了需要重新开始. 持久化只需要做如下配置(以SQLServer为例) NameValueCollection properties = new NameValueCollection(); //存储类型 properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobSt

工作在服务器模式下的rsync的安装、配置与使用22

rsync命令可以用于在本地系统中复制文件(如同cp命令),也可以在本地和远程主机之间复制文件(如同scp命令),还可以工作在服务器模式下(使用功能上类似FTP.SAMBA等).本文主要介绍rsync在服务器模式下的配置和应用举例. rsync命令常用选项 -n: 仅做执行测试,不做实际动作 -v, --verbose: 输出详细执行信息 -q, --quiet: 静默模式 -c, --checksum: 开启校验功能,强制对文件传输进行校验 -r, --recursive:递归复制 -a, -

oracle安装中桌面模式与服务器模式的去别

桌面模式只能本机使用. 服务器模式可以在网络中使用,也就是网络中的其他服务器可以使用. 所以安装时,如果是生产环境肯定是服务器模式.一般也都是服务器模式.

VSCode前端文件(html文件)如何以服务器模式打开?

方法1: VSCode前端文件(html文件)如何以服务器模式打开?比如工程下有一个A.html文件,想在VSCode里面直接操作,就想Webstorm一样,以http://localhost/xxx/xx/xx/A.html这样的形式在浏览器中访问.发现只有一个 View In Browser 插件,但是并不是这样的形式,求大神解答? npm install http-server -g 在项目目录打开终端输入 hs 就可以启动web服务器了,很简洁 方法2: VScode安装Live Ser

客户端-服务器模式

客户端-服务器模式采取的是:主动请求方式 首先服务器方要先启动,并根据请求提供相应服务: 1. 打开一通信通道并告知本地主机,它愿意在某一公认地址上(周知口,如FTP为21)接收客户请求: 2. 等待客户请求到达该端口: 3. 接收到重复服务请求,处理该请求并发送应答信号.接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork.exec).新进程处理此客户请求,并不需要对其它请求作出应答.服务完成后,关闭此新进程与客户的通信链路,并终止. 4. 返回第二步,等待另一客户

mysql SQL服务器模式

MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用--sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(--sql-mode =""). 你还可以在启动后用SET