浅谈服务器的C/S模型

来源:互联网 发布:php做app 编辑:程序博客网 时间:2024/05/17 05:19

        过去的一年,做了几个基于C/S模型的客户端和服务器,C/S模型就是“客户端/服务器”模型的简写。基于分享就是最好的学习,所以对其进行回顾是很有必要的。

       其实,TCP/IP协议在设计和实现上并没有客户端和服务器概念的区分,它们在通信过程中所有的机器是对等的。但在实际的应用中,尤其是在互联网中,很多数据都被数据提供者所垄断,使得很多网络应用程序不得不采用C/S模型:所有的客户端都通过访问服务器来获取所需的资源。

       服务器的工作逻辑为:启动服务器后,首先创建一个或几个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接。

       客户端的工作逻辑为:在服务器稳定运行后,客户端就可以调用connect函数向服务器发起连接了。

       由于客户连接请求是随机到达的异步事件,服务器需要使用某种I/O模型来监听这一事件,Linux下实现I/O复用的系统调用主要由select, poll和epoll。


       当监听到连接请求后,服务器就调用accept函数接受它,并分配一个逻辑单元为新的连接服务。逻辑单元可以是新创建的子进程、子线程或者其他。上图分配的是fork系统调用创建的子进程。逻辑单元读取客户请求,处理后将结果返回给客户端。服务器在处理一个客户请求的同时还会监听其他客户请求,上图通过select系统调用实现。

       小结:C/S模型非常适合资源相对集中的场合,实现也比较容易,但其缺点是当访问量过大时,可能造成对所有的客户端响应都很慢。

0 0
原创粉丝点击