高性能服务器程序框架

本文对比分析了C/S和P2P服务器模型的优缺点,探讨了P2P模型在网络负载和可扩展性上的优势。此外,介绍了服务器编程框架,详细讲解了Reactor和Proactor模式,以及半同步/半异步和领导者/追随者两种并发模式,以提高服务器程序的性能和效率。
摘要由CSDN通过智能技术生成

服务器模型

C/S模型

客户连接请求是随机到达的异步事件,服务器需要使用某种I/O模型来监听这一事件。

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

P2P模型

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

图a中的P2P模型存在一个显著的问题,即主机之间很难互相发现。所以实际使用的P2P模型通常带有一个专门的发现服务器。这个发现服务器通常还提供查找服务(甚至还可以提供内容服务),使每个客户都能尽快地找到自己需要的资源。 

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

C/S模型和P2P模型的比较

不难看出,在C/S模型中,服务器性能的好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。而P2P的思想是整个互联网中的传输内容不再被保存在中心服务器上,每个节点都同时具有下载、上传的功能,其权利和义务都是大体相等的。

客户/服务器模型的主要特点主要有:

(1)网络中各计算机的地位不平等,服务器可以通过对用户权限的限制来达到管理客户机的目的。整个网络的管理工作由少数服务器担当,故网络的管理非常集中和方便。

(2)客户机相互之间不直接通信。例如,在Web应用中两个浏览器并不直接通信。

(3)可扩展性不佳。受服务器硬件和网络带宽的限制,服务器支持的客户机数有限。

和C/S模型相比,P2P模型的优点主要体现在:

(1)减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上,因此大大提高了系统效率和资源利用率。

(2)可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求。

(3)网络健壮性强,单个结点的失效也不会影响其他部分的结点。

P2P模型也有缺点,在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存,影响整机速度。例如,经常进行P2P下载还会对硬盘造成较大的损伤。据

核心特性 1.基于swoole提供分布式服务器通讯服务 2.基于thrift提供rpc远程调用服务 3.基于HTML5提供在线网络直播平台服务 4.基于swoole提供同步异步数据库连接池服务 5.基于swoole提供异步任务服务器 6.基于vmstat提供服务器硬件实时监控服务 7.基于yac、yaconf提供共享数据、配置服务 8.基于zqf提供高并发计数器、红包、二维码服务 9.很好的支持网页版console的shell服务 服务启动 需要php以cli模式运行/server/server.php php server.php start php server.php stop php server.php restart composer 安装 { "require": { "qieangel2013/zys": "0.1.4" } } 分布式服务器通讯服务 建立多个服务器之间进行数据通信服务,服务自动连接在线服务器,支持热拔,启动服务后自动连接,无需人为干预 注意事项: 需要在conf/application.conf里配置端口和监听、日志等 需要有一个redis服务器,并且分布式服务器都能连接redis web端可以直接调用服务 使用如下 //注意:type为sql、file,要是需要别的功能,自己定义 if($_FILES){ //数据同步 $sql = array('type'=>'sql','data'=>'show tables'); var_dump(distributed::getInstance()->query($sql)); //文件同步(不用安装rsync notify就可以实现文件同步,并且是触发式的占用很小的资源,调用sendfile零复制) $dir_pre=MYPATH.'/public/uploads/'; if(!is_dir($dir_pre.date('Ymd'))){ mkdir($dir_pre.date('Ymd'),0777,true); } if(is_uploaded_file($_FILES['file']['tmp_name'])){ $upname=explode('.',$_FILES['file']['name']); $filename=uniqid().substr(time(),-4).'.'.$upname[1]; if(move_uploaded_file($_FILES['file']['tmp_name'],$dir_pre.date('Ymd').'/'.$filename)){ echo "Stored in: " . $dir_pre.date('Ymd').'/'.$filename; $fileinfo = array('type'=>'file','data'=>array('path' =>'/public/uploads/'.date('Ymd').'/'.$filename,'size'=>$_FILES['file']['size'],'ext'=>$upname[1])); var_dump(distributed::getInstance()->queryfile($fileinfo)); }else{ echo 'Stored failed:file save error'; } }else{ echo 'Stored failed:no post '; } } 本地访问:http:/localhost/index/distributed/ 架构图 执行结果如下  thrift的rpc远程调用 本地访问http://localhost/index/rpc (返回0表示成功) 数据库连接池使用方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值