高性能服务器程序框架

服务器解构为三个主要模块:

  • IO处理单元。四种IO模型和两种高效事件处理模式。
  • 逻辑单元。两种高效并发模式。
  • 存储单元。(暂不讨论)

1.服务器模型

(1)C/S (客户端/服务器)模型

C/S模型的逻辑很简单。服务器启动后,首先创建一个或者多个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接。服务器稳定运行后,客户端就可以调用Connect函数向服务器发起连接了。由于客户连接请求时随机到达的异步事件,服务器需要使用某种I/O模型来监听到连接请求后,服务器就调用accept函数接受它了,并且分配一个逻辑单元为新的连接服务。

这里写图片描述

C/S模型非常适合资源相对集中的场合,并且它的实现也很简单,但其缺点也很明显:服务器是通信中心,当访问量过大时,可能所有客户都将得到很慢的响应。P2P可以解决这个问题。

这里写图片描述

(2)P2P模型

P2P模型比C/S模型更符合网络通信的实际情况。它摒弃了以服务器为中心的格局,让网络上所有主机重新回归对等的地位。

P2P模型使得每台机器在消耗服务的同时也给比人提供服务,这杨的资源能够充分。自由的共享。云计算而已看做P2P模型的一个典范。P2P缺点:当用户之间传输的请求过多时,网络的负载将加重。

P2P的另外一个问题是,主机之间很难互相发现。所以实际使用的P2P模型通常带有一个专门的发现服务器,这个发现服务器通常还提供查找服务,甚至提供内容服务器,使每个客户能尽快找到自己需要的资源。

这里写图片描述

从编程的角度看,P2P模型可以看做C/S模型的扩展:每台主机既是客户端,又是服务器。

2.服务器编程框架

模块 单个服务器程序 服务器集群
I/O处理模块 处理客户端连接,读写网络数据 作为接入服务器,实现负载均衡
逻辑单元 业务进程或者线程 逻辑服务器
网络存储单元 本地数据库,文件或者缓存 数据库服务器
请求队列 各个单元之间的通信方式 各个服务器之间的永久TCP连接。

2. I/O模型:

  • 阻塞IO
  • 非阻塞IO
  • IO复用//程序阻塞于IO复用系统调用,但可同时监听多个IO事件。
  • SIGIO信号//信号触发读写就绪事件,用户程序执行读写操作,程序没有阻塞阶段
  • 异步IO//内核执行读写操作并触发读写完成事件。程序没有阻塞阶段

这里写图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值