C/S和B/S两种架构区别与优缺点分析


Posted in PHP onOctober 23, 2014

一、C/S 架构

1、 概念

C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。

C/S 架构也可以看做是胖客户端架构。因为客户端需要实现绝大多数的业务逻辑和界面展示。这种架构中,作为客户端的部分需要承受很大的压力,因为显示逻辑和事务处理都包含在其中,通过与数据库的交互(通常是SQL或存储过程的实现)来达到持久化数据,以此满足实际项目的需要。

2 、优点和缺点

优点:

2.1 C/S架构的界面和操作可以很丰富。
2.2 安全性能可以很容易保证,实现多层认证也不难。
2.3 由于只有一层交互,因此响应速度较快。

缺点:

2.4 适用面窄,通常用于局域网中。
2.5 用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户。
2.6 维护成本高,发生一次升级,则所有客户端的程序都需要改变。

二、B/S架构

1、概念

B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现,Browser客户端,WebApp服务器端和DB端构成所谓的三层架构。B/S架构的系统无须特别安装,只有Web浏览器即可。

B/S架构中,显示逻辑交给了Web浏览器,事务处理逻辑在放在了WebApp上,这样就避免了庞大的胖客户端,减少了客户端的压力。因为客户端包含的逻辑很少,因此也被成为瘦客户端。

2 、优点和缺点

优点:

1)客户端无需安装,有Web浏览器即可。
2)BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强。
3)BS架构无需升级多个客户端,升级服务器即可。

缺点:

1)在跨浏览器上,BS架构不尽如人意。
2)表现要达到CS程序的程度需要花费不少精力。
3)在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题。
4)客户端服务器端的交互是请求-响应模式,通常需要刷新页面,这并不是客户乐意看到的。(在Ajax风行后此问题得到了一定程度的缓解)

三、B/S对C/S的改进和扩展

正如前文所说,C/S和B/S都可以进行同样的业务处理,但是B/S随着Internet技术的兴起,是对C/S结构的一种改进或者扩展的结构。相对于C/S,B/S具有如下优势:

1、分布性:可以随时进行查询、浏览等业务

2、业务扩展方便:增加网页即可增加服务器功能

3、维护简单方便:改变网页,即可实现所有用户同步更新

4、开发简单,共享性强,成本低,数据可以持久存储在云端而不必担心数据的丢失。

四、主流的Web程序应用平台

一个动态网站服务器平台至少要包括:操作系统+Web服务器+应用程序服务+数据库。一个优秀的网站服务器是由多方面因素决定的,如个人喜好、部署费用、安全机制等。而现在主流的三种Web平台:ASP.NET、JavaEE和LAMP各有优缺点,以满足不同的需要和用户。三者比较如下:

C/S和B/S两种架构区别与优缺点分析

三种平台的各部分组合:

ASP.NET:Windows Server+IIS+SQL Server+ASP

JavaEE:UNIX+Tomcat+Oracle+JSP

LAMP:Linux+Apache+MySQL+PHP

五、三张图告诉你Web工作原理

1、服务器不带应用程序和数据库,直接请求HTML文件

C/S和B/S两种架构区别与优缺点分析

2、服务器带应用程序(如php)

C/S和B/S两种架构区别与优缺点分析

3、服务器带应用程序和数据库

C/S和B/S两种架构区别与优缺点分析

PHP 相关文章推荐
PHP.MVC的模板标签系统(二)
Sep 05 PHP
如何对PHP程序中的常见漏洞进行攻击(下)
Oct 09 PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 PHP
PHP常用header头定义代码示例汇总
Aug 29 PHP
php中字符串和正则表达式详解
Oct 23 #PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 #PHP
PHP制作图形验证码代码分享
Oct 23 #PHP
PHP链接MySQL的常用扩展函数
Oct 23 #PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 #PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 #PHP
20个2014年最优秀的PHP框架回顾
Oct 22 #PHP
You might like
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
jquery中的查找parents与closest方法之间的区别
2013/12/02 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
python重试装饰器示例
2014/02/11 Python
Python实现partial改变方法默认参数
2014/08/18 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python显示生日是星期几的方法
2015/05/27 Python
python避免死锁方法实例分析
2015/06/04 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
如何运行带参数的python脚本
2019/11/15 Python
python实现修改固定模式的字符串内容操作示例
2019/12/30 Python
浅谈Python 函数式编程
2020/06/20 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
可贵的沉默教学反思
2014/02/06 职场文书
感恩之星事迹材料
2014/05/03 职场文书
大学生心理活动总结
2014/07/04 职场文书
雷锋式好少年事迹材料
2014/08/17 职场文书
党员批评与自我批评
2014/10/15 职场文书
2015年教研组工作总结
2015/05/04 职场文书