对C/S(客户端/服务器)应用的思考

        基于浏览器的WEB应用是典型的C/S应用,那么B/S(浏览器/服务器)应用的本质是什么,实际上就是网络中主机与主机的通信,说的更确切一些就是网络某个主机的进程与另一个主机的进程之间的通信,只不过这种主机进程之间的通信是跨网络的,主机进程之间通信常用的方法有Socket(套接字),使用Socket可以实现TCP(传输控制协议)和UDP(用户数据报协议)协议的通信方式,而这两种协议处于网络体系结构中的传输层,而传输层的主要功能或者说它能够向网络体系结构中上一层(应用层)提供的访服务是:运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。所以我们的应用可以直接架构在传输层上,利用传输层的数据传输服务来实现我们的主机间通信,在编程中Socket是对传输层的封装和抽象,所以我们可以利用Socket来编写基于请求响应模式的应用,即从理论上来说,Socket就可以来编写基于C/S的应用,事实上也确实是可以的。但是直接用Socket来进行主机进程间的通信还是有许多问题的,例如:在通常的C/S应用中,服务器的IP和Port(端口)通常是所有客户端所熟知的,所以客户端可以先该IP 和Port发送请求(数据),然而服务器对连接到它上的所有客户端却是一无所知的,服务器要想对客户端的请求做出响应就必须掌握客户端的一些信息,那么这些信息应该包含哪些东西,我们开发的应用就必须做出约定。再才传输的数据角度上看,这里的数据实际上充当了主机进程间通信的语言,而语言就应该有他的语法规则,否则就无法交流了。例如:说英语的人和说德语的人在一起就无法交流,就是因为英语和德语之间的语法规则不同。同样的道理,如果客户端和服务器端之间传递的数据没有一定的规则,那么服务器也就无法正确响应客户端的请求了,客户端即使收到服务器的响应(数据),由于没有一定的数据规则,客户端也无法对数据进行处理了,这样主机间的通信实际上是失败的(通信的目的是为了彼此告知,而此时客户端和服务器都无法相互“理解”,这样的通信自然是失败的)。综上可知,我们的应用在架构的时候就必须定制一套规则,这套规则用来描述:① 服务器进程必须知道客户端的哪些信息才能够将响应正确的发送给发送请求的主机进程。② 客户端和服务器之间传输的数据应该具有什么样的语法规则,才能使得两者之间能够相互理解彼此发送的数据。只有制定了这套规则之后我们的应用才可以用Socket来完成业务逻辑的编写。对应特殊的应用来说,我们制定这套规则是有好处的,私有的通信规则,防止数据被泄露。然而对与大部分应用来说,制定这套规则是非常麻烦的,同时制定规则是还必须考虑将来应用的扩展和升级等。所以我们可以使用现成的一套规则来完成Socket编程的工作,这套规则就是HTTP协议(超文本传输协议),HTTP协议作为应用层的协议规定了数据请求头,响应头,数据请求方法(GET POST),传输数据的格式(HTML格式的文本文件),由于HTTP协议的规定使得客户端的开发变得尤为简单,浏览器实际上利用HTTP协议来发送请求和接受响应,然后将HTML文件进行解析和渲染,呈现给客户,所以我们无需开发专门的客户端来处理发送请求和处理响应的过程,应为浏览器就已经是很好的客户端了。我们的应用也变得的尤其简单了,我们只要按照HTTP协议中的HTML文件格式处理请求就可以了。这时候在服务器端还是可以使用Socket来直接编程,只要发送的数据符合HTTP协议即可(响应头+HTML文件)。但是服务器实际上还是可以更加简化(就是因为使用了HTTP协议),因为从客户端发送过来的HTTP请求其格式是固定的,所以我们可以专门编写一个程序用来将HTTP请求的信息进行预处理,从而使得我们的应用可以使用一些函数就可以获取HTTP请求信息,而不是整个请求头(我们的应用如果获取整个请求头,还得对请求头进行处理),从而简化了我们的编程,使得我们的应用只关注自己应用的业务逻辑,而不是花时间来处理请求头,和编写响应头。这个帮我们① 等待客户端请求;② 处理请求头;③ 编写要发送给客户端的响应头及HTML文件的,程序就是HTTP服务器,实际上HTTP服务器接管了HTTP请求的处理和HTTP响应的发送(底层使用Socket进行数据的传输,从而实现主机进程间通信),HTTP服务器向我们暴露了一些接口,我们通过这些接口就可以实现我们的C/S应用,这种C/S应用,就是现在主流的WEB应用开发中常用的B/S架构。

         常用的HTTP服务器有 TomCat,IIS 等,所谓不同的服务器实际上就是采用不同的封装思想对Socket编程的封装,例如TomCat,它将HTTP请求和响应封装成HttpServletRequest 和 HttpServletResponse 这两个Java类,所以我们的应用就可以使用Java语言来编写程序来使用这两个类,这样就形成了基于Java的Web应用编程。所以不管应用是使用什么HTTP服务器,整个应用的基本架构是一致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值