C/C++编程:高性能服务器程序框架

服务器模型

CS模型

TC/IP协议在设计和实现上没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但是由于资源(视频、新闻、软件等)都被数据提供者垄断,因此几乎所有的网络程序都采用了CS模型:所有客户端都通过访问服务器来获取所需的资源:

  • 服务器启动后,首先创建一个或者多个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接
  • 服务器稳定运行之后,客户端就可以调用connect函数向服务器发起连接了
  • 由于客户请求连接是随机到达的异步事件,服务器就需要使用某种IO模型(最常见的是select/poll/epoll系统调用)来监听这一事件。
  • 当监听到连接请求之后,服务器就调用accept函数接受它,并分配一个逻辑单元为新的连接服务。逻辑单元可以是新创建的子进程、子线程或者其他。
  • 逻辑单元读取客户请求,处理该请求,然后将返回结果返回给客户端。
  • 客户端接受到服务器反馈的结果之后,可以继续向服务器发送请求,也可以立即主动关闭连接。如果客户端主动关闭连接,则服务器执行被动关闭连接。至此,双方的通信结束

在这里插入图片描述
服务器在处理一个客户端请求的时候还会同时继续监听其他客户请求(比如可以通过select系统调用实现):
在这里插入图片描述
CS模型适合资源相对集中的场景

  • 优点:实现简单
  • 缺点:服务器是通信的中心,当访问量过大时,响应慢

P2P模型

P2P模型摒弃了以服务器为中心的格局,让网络上所有主机重新回归对等的地位。

  • 优点:使得每台机器在消耗服务的同时也给别人提供服务,这样资源能够充分、自由的共享
  • 缺点:当用户之间传输的请求过多时,网络的负载将加重

最常见的P2P模型的实现时云计算机群

在这里插入图片描述
上面P2P模型存在一个显著的问题:主机之间很难互相发现。所以P2P模型通常有一个专门的发现服务器:
在这里插入图片描述
P2P模型可以看成是CS服务器的扩展:每台主机即使客户端,又是服务器。

所以我们来讨论CS模型

服务器编程框架

虽然服务器程序种类很多,但是基本框架都是一样的:
在这里插入图片描述

模块单个服务器程序服务器机群
IO处理单元处理客户连接,读写网络数据作为接入服务器,实现负载均衡
逻辑单元业务进程或者线程逻辑服务器
网络存储单元本地数据库、文件或者缓存数据库服务器
请求队列各单元之间的通信方式各服务器之间的永久连接
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值