从Socket谈到浏览器和服务器之间的关系
__by 谭小龙
Socket这个词是插拔线的意思.就好比过去的老式插线电话机在通话是需要插拔线,目的是用于通信.既然是用于通信,是谁和谁通信呢?是服务器和客户端.你拿起一架叫socket的电话机,我也拿起来一架叫socket的电话机.就能通信了么.是的,只是还需要一些必要的配置,就好比,你想打电话但是却不想拨号,那就算你老爸是李刚也肯定打不给你想要通信的对象.那么在浏览器和服务器之间通信,这个"电话号码"是什么呢?就是ip和端口.(ipaddress和port).socket得独享一个Endpoint(结点) 独占一个端口.然后开启侦听,当有连接的时候,就可以调用Accept方法来接受,并返回一个新的代理socket,这个代理socket就可以向客户端发送(send方法)数据了.而接受(Receive方法)数据与send是相对出现的.socket在发送和接收的数据类型都是字节数组.因为网络传输是靠高电压和低电压.而二进制的0和1正 好能够用来表示高电压和低电压.
好,明白了Socket之后,那么想明白浏览器和服务器之间的关系就不太难了.首先,一个浏览器就是一个socket的客户端,它主要负责的工作就是两个:1.把用户的操作封装成Http请求报文;2.接收从服务器返回的响应报文,解析并渲染成相应html标签;客户端的这两个工作都需要服务器的配合,否则无法完成.从浏览器封装http请求报文开始,它通过socket发送数据到服务器端.从服务器端简单来说,其实就是通过服务器端的socket来接收请求报文,处理,然后返回响应;不过这只是粗略的说法,稍微具体的说一下,就是服务器在接收了请求报文之后,就封装成了Httptext(请求上下文)字符串,顾名思义,就是一个既有请求报文又有响应的相关信息.这是接收的环节.到了处理的环节了,服务器就需要一个司职处理的人才,于是在服务器的召唤之下,HttpAppliction大神就出现了.这个继承了IHttpHandler大神,从这个接口那里得到了一个ProcessRquest的方法.这个方法传进去HttpText请求上下文,并在方法内将用户的请求做出相关的处理,将用户请求的文件放到context的响应报文里去,至此才算是完成了处理工作;最后一步就是调用服务器端的代理socket将响应报文返回给浏览器..而此时浏览器就正好完成自己的第二个工作,接受响应报文并渲染html页面.