From cea88e25b0ab862b44e319571b3c2d87f60de44a Mon Sep 17 00:00:00 2001 From: astaxie Date: Fri, 12 Oct 2012 17:47:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 8.2.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/8.2.md b/8.2.md index ca4492e8..ce2c1c00 100644 --- a/8.2.md +++ b/8.2.md @@ -1,9 +1,9 @@ #8.2 WebSocket -首先我们了解一下什么是WebSocket?WebSocket是HTML5的重要特性,其通信协议实现的是基于浏览器的远程socket,实现了浏览器和服务器全双工通信,许多浏览器(Firefox、Google Chrome和Safari)都已对此做了支持。 +WebSocket是HTML5的重要特性,它实现了基于浏览器的远程socket,它使浏览器和服务器可以进行全双工通信,许多浏览器(Firefox、Google Chrome和Safari)都已对此做了支持。 -在WebSocket之前,为了实现即时通信,所用的技术都是轮询,在特定的时间间隔内,由浏览器对服务器发出HTTP Request,然后服务器返回最新的数据给客户端的浏览器,但是这样浏览器需要对服务器不断发出请求,会占用很多带宽。 +在WebSocket出现之前,为了实现即时通信,采用的技术都是“轮询”,即在特定的时间间隔内,由浏览器对服务器发出HTTP Request,服务器在收到请求后,返回最新的数据给浏览器刷新,“轮询”使得浏览器需要对服务器不断发出请求,这样会占用大量带宽。 -WebSocket使得浏览器和服务器只需要要做一个握手的动作,其用到了一些特殊的报头。然后,浏览器和服务器之间就形成了一条快速通道。连接会保持在活动状态,你可以使用JavaScript来写入和接收数据,就像是在使用一个原始的TCP Socket一样。两者之间就直接可以数据互相传送,它解决了Web实时化的问题,相比传统HTTP有如下好处: +WebSocket采用了一些特殊的报头,使得浏览器和服务器只需要做一个握手的动作,就可以在浏览器和服务器之间建立一条连接通道。且此连接会保持在活动状态,你可以使用JavaScript来向连接写入或从中接收数据,就像在使用一个常规的TCP Socket一样。它解决了Web实时化的问题,相比传统HTTP有如下好处: - 一个Web客户端只建立一个TCP连接 - Websocket服务端可以推送(push)数据到web客户端. @@ -14,9 +14,9 @@ WebSocket URL的起始输入是ws://或是wss://(在SSL上)。下图展示 ![](images/8.2.websocket.png?raw=true) ##WebSocket原理 -WebSocket的协议颇为简单,在第一次handshake通过以后,便建立连接,其后的通讯数据都是以”\x00″开头,以”\xFF”结尾。在客户端,这个是透明的,WebSocket组件会自动将原始数据“掐头去尾”。 +WebSocket的协议颇为简单,在第一次handshake通过以后,连接便建立成功,其后的通讯数据都是以”\x00″开头,以”\xFF”结尾。在客户端,这个是透明的,WebSocket组件会自动将原始数据“掐头去尾”。 -在实现WebSocket连线过程中,需要透过浏览器发出WebSocket连线请求,然后服务器发出回应,这个过程通常称为“握手” (handshaking)。请看下面的请求和反馈信息: +浏览器发出WebSocket连接请求,然后服务器发出回应,然后连接建立成功,这个过程通常称为“握手” (handshaking)。请看下面的请求和反馈信息: ![](images/8.2.websocket2.png?raw=true) @@ -24,7 +24,7 @@ WebSocket的协议颇为简单,在第一次handshake通过以后,便建立 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 -把Sec-WebSocket-Key:后的字符串,即:f7cb4ezEAl6C3wRaU6JORA== 连接上那一串固定字符串,生成一个这样的字符串: +即:`f7cb4ezEAl6C3wRaU6JORA==`连接上那一串固定字符串,生成一个这样的字符串: f7cb4ezEAl6C3wRaU6JORA==258EAFA5-E914-47DA-95CA-C5AB0DC85B11 @@ -32,14 +32,14 @@ WebSocket的协议颇为简单,在第一次handshake通过以后,便建立 rE91AJhfC+6JdVcVXOGJEADEJdQ= -生成后,输出Sec-WebSocket-Accept响应头反馈给客户端。 +将之作为响应头`Sec-WebSocket-Accept`的值反馈给客户端。 ##Go实现WebSocket -Go语言标准包里面没有针对WebSocket的支持,但是在他的net额外库中有这个的支持,首先你可以通过如下的命令获取该代码包: +Go语言标准包里面没有提供对WebSocket的支持,但是在由官方维护的go.net子包中有对这个的支持,你可以通过如下的命令获取该包: go get code.google.com/p/go.net/websocket -WebSocket分为客户端和服务端,我们接下来实现一个简单的例子,用户输入信息,客户端通过WebSocket发送给服务器端,服务器端收到信息之后主动的Push信息到客户端,输出相应的信息,客户端的代码如下: +WebSocket分为客户端和服务端,接下来我们将实现一个简单的例子:用户输入信息,客户端通过WebSocket将信息发送给服务器端,服务器端收到信息之后主动Push信息到客户端,然后客户端将输出其收到的信息,客户端的代码如下: @@ -83,7 +83,7 @@ WebSocket分为客户端和服务端,我们接下来实现一个简单的例 -我们可以看到客户端JS很容易就通过`WebSocket`函数建立了一个sock,当客户端握手成功后,会触发WebScoket对象的onopen事件,告诉客户端连接已经成功建立。客户端一共绑定了四个事件。 +可以看到客户端JS,很容易的就通过WebSocket函数建立了一个与服务器的连接sock,当握手成功后,会触发WebScoket对象的onopen事件,告诉客户端连接已经成功建立。客户端一共绑定了四个事件。 - 1)onopen 建立连接后触发 - 2)onmessage 收到消息后触发 @@ -132,7 +132,7 @@ WebSocket分为客户端和服务端,我们接下来实现一个简单的例 } } -当我们再客户端输入信息之后,在服务器端通过Receive接收数据,然后通过Send发送数据。 +当客户端将用户输入的信息Send之后,服务器端通过Receive接收到了相应信息,然后通过Send发送了应答信息。 ![](images/8.2.websocket3.png?raw=true)