企业服务器搭建价格,云主机计费

  企业服务器搭建价格,云主机计费

  WebSocket(1)- WebSocket介绍(1)- WebSocket API一种新的HTML5通信协议。目前流行的浏览器都支持这个协议,比如chrome、Safari、Firefox、Opera、IE等。最早支持这个协议的应该是Chrome,从chrome12就开始支持了。随着协议草案的不断变化,各种浏览器对协议的实现也在不断更新。该协议仍是草案,但还没有成为标准。不过,成为标准应该只是时间问题。从WebSocket草案提出到现在已经有十几个版本了。目前最新版本是版本17,对应的协议版本号是13。目前对该协议支持最完善的浏览器应该是chrome。毕竟WebSocket草案协议也是Google发布的。

  WebSocket API介绍:首先看一个简单的调用WebSockets的API的JavaScript代码。

  var ws=new web socket(" ws://echo . web socket . org ");ws . on open=function(){ ws . send(" Test!");};ws . on message=function(evt){ console . log(evt . data);ws . close();};ws . on close=function(evt){ console . log(" WebSocket closed!");};ws . on error=function(evt){ console . log(" WebSocketError!");};这段代码总共只有5行。现在简单总结一下这5行代码的意义。

  第一行代码是申请一个WebSocket对象,参数是需要连接的服务器的地址。WebSocket协议的URL以ws://开头,就像http协议以http://开头一样,安全WebSocket协议以wss://开头。

  第二行到第五行注册WebSocket对象的消息处理函数。WebSocket对象支持四种消息:onopen、onmessage、onclose和onerror。当Browser和WebSocketServer连接成功时,会触发onopen消息。如果连接失败,发送和接收数据失败,或者处理数据出现错误,浏览器会触发onerror消息;当浏览器接收到WebSocketServer发送的数据时,会触发onmessage,参数evt包含服务器发送的数据;当浏览器接收到WebSocketServer发送的连接关闭请求时,会触发onclose消息。我们可以看到所有的操作都是由消息触发的,这样UI就不会被阻塞,UI的响应时间会更快,获得更好的用户体验。

  WebSocket(2)——为什么引入WebSocket协议的浏览器已经支持http协议,为什么还需要开发新的web socket协议?我们知道http协议是一种单向网络协议。连接建立后,只允许Browser/UA(UserAgent)向WebServer请求资源,WebServer才能返回相应的数据。但是WebServer无法主动将数据推送到Browser/UA。最初设计http协议也是有原因的。假设WebServer可以主动推送数据到Browser/UA,Browser/UA就很容易被攻击,一些广告主会主动强制一些广告信息在不经意间传输到客户端,这就是灾难。那么单向http协议给现在的网站或者web应用开发带来了什么问题呢?

  我们来看一个案例。现在假设我们要开发一个基于Web的应用程序来获取当前Web服务器的实时数据,比如股票的实时行情,火车票的余票等。这需要Browser/UA与Web服务器之间反复进行http通信,浏览器不断发送Get请求来获取当前的实时数据。以下是一些常见的方法:

  轮询意味着浏览器/UA定期向Web服务器发送http Get请求。服务器收到请求后,会将最新的数据发送回客户端(Browser/UA)。浏览器/UA得到数据后,显示出来,然后定期重复这个过程。虽然这样可以满足需求,但还是存在一些问题。比如浏览器/UA还是需要定时发送Get请求来询问,所以Web服务器会重新发送旧的数据,浏览器/UA会重新显示未改变的数据,这显然浪费了网络带宽和CPU利用率。如果增加浏览器接收请求的时间,这个问题可以得到缓解。但是,如果Web服务器上的数据更新很快,就不能保证Web应用程序的实时性。

  LongPolling描述了上面轮询遇到的问题。现在我们来介绍一下长轮询,它是对轮询的一种改进。

  Browser/UA向Web服务器发送Get请求。这时,Web服务器可以做两件事。首先,如果服务器有新数据要传输,它会立即将数据发送回Browser/UA。浏览器/UA收到数据后,会立即向web服务器发送Get请求。其次,如果服务器没有新的数据要发送,这里与轮询方式不同,服务器不会立即向Browser/UA发送响应,而是保持请求,等待新的数据到达后再响应请求;当然,如果服务器的数据长时间没有更新,过了一段时间,这个Get请求就会超时。浏览器/UA收到超时消息后,会立即向服务器发送新的Get请求。然后依次循环这个过程。

  虽然这种方法在一定程度上降低了网络带宽和CPU的利用率,但仍然存在一些缺陷。例如,假设服务器的数据更新速率快,服务器在向浏览器发送一个数据包后,必须等待浏览器的下一个Get请求,然后才能向浏览器发送第二个更新的数据包。在这种情况下,浏览器显示实时数据的最快时间是2RTT(往返时间)。另外,在网络拥塞的情况下,这应该是用户无法接受的。此外,由于http包的头数据往往很大(一般在400字节以上),而服务器真正需要的数据却很少(有时只有10字节左右),这类包在网络上的周期性传输必然会浪费网络带宽。

  通过上面的分析可以看出,如果浏览器中有一个新的网络协议,可以支持客户端和服务器之间的双向通信,并且协议的头部没有那么庞大。WebSocket就是带着这样的使命登台的。

  web socket(3)——web socket介绍(3)——web socket协议是一种双向通信协议。它是基于TCP的,和http一样通过TCP传输数据,但是它和http有两大点不同:1。WebSocket是一种双向通信协议。连接建立后,WebSocket服务器和Browser/UA可以像Socket一样,主动地互相发送或接收数据。不同的是WebSocket是一个简单的基于Web的套接字模拟协议。2.WebSocket需要握手连接。和TCP类似,也需要客户端和服务器握手连接。只有成功连接后,它们才能相互通信。

  下面是建立握手的简单序列图:

  下面是WebSocket握手过程的简要描述。

  当Web应用程序调用新的WebSocket(url)接口时,浏览器启动与具有url地址的Web服务器建立握手连接的过程。

  浏览器通过TCP三次握手与WebSocket服务器建立连接。如果连接失败,将不会执行下面的过程,Web应用程序将收到一条错误消息。

  TCP成功建立连接后,Browser/UA通过http协议向服务器传输WebSocket支持的版本号、协议版本号、源地址、主机地址等一些列字段。

  例如:

  GET /chat HTTP/1.1主机:server.example.com升级:websocket连接:升级Sec-web socket-Key:dghlihnhbxbbszsbu b 25 jzq==Origin:http://example.com Sec-web socket-Protocol:Chat,Super Chat Sec-web socket-Version:13 web socket服务器收到Browser/UA发送的握手请求后,如果数据包的数据和格式正确,客户端和服务器的协议版本号匹配等,它会接受这个握手连接,并给出相应的数据回复。同样的回复数据包也通过http协议传输。HTTP/1.1 101交换协议升级:websocket连接:升级Sec-web socket-Accept:s 3 plmbitxaq 9 kygzzzhzrbk xOo=Sec-web socket-Protocol:chat Brows收到er服务器回复的数据包后,如果数据包的内容和格式没有问题,则表示连接成功,触发onopen消息。此时,Web开发人员可以通过send接口向服务器发送数据。否则,握手连接会失败,Web应用程序会收到onerror消息,并知道连接失败的原因。web socket(4)-web socket(4)-web socket和TCP,Http WebSocket和Http协议一样都是基于TCP的,所以都是可靠的协议。Web开发人员调用的WebSocket的send函数,最终在浏览器的实现中通过TCP的系统接口传递。WebSocket和Http一样,都属于应用层协议,那么它们之间有什么关系吗?答案是肯定的。当WebSocket建立握手连接时,数据是通过http协议传输的,就像我们在上一节“GET/chat http/1.1”中看到的,它只使用了http协议的一些简单字段。但是,连接建立后,真正的数据传输阶段不需要http协议的参与。

  详情请参考下图:

  Web socket(5)Web socket服务器如果我们想搭建一个Web服务器,我们会有很多选择。市场上也有很多成熟的产品供我们应用,比如开源的Apache。安装后,它可以使用简单配置(或默认配置)工作。但是如果你想搭建一个WebSocket服务器,就没那么容易了,因为WebSocket是一个新的通信协议,目前还是草案,还没有成为标准。市面上没有成熟的WebSocket服务器或库来实现WebSocket协议,所以我们必须自己编写代码来解析和组装WebSocket包。要完成这样一个WebSocket服务器,估计所有人都想放弃了。好在市面上有几个不错的开源库供我们使用,比如PyWebSocket、WebSocket-Node、LibWebSockets等。这些库文件已经实现了WebSocket包的封装和解析,我们可以调用这些接口,大大减少了我们的工作量。

  下面简单介绍一下这些开源库文件。

  PyWebSocket PyWebSocket是用Python语言编写的,可以很好的跨平台,易于扩展。目前WebKit用它搭建WebSocket服务器做LayoutTest。

  我们可以通过下面的命令获得源代码

  SVN checkouthttp://pywebsocket.googlecode.com/svn/trunk/pyweb socket-只读

  更多细节可以从http://code.google.com/p/pywebsocket/.获得

  WebSocket-Node WebSocket-Node是用JavaScript语言写的,这个库基于nodejs。熟悉JavaScript的可以参考一下。此外,Html5和Web应用越来越流行,nodejs也受到广泛关注。

  我们可以从下面的链接获得源代码。

  https://github.com/Worlize/Websocket-Node

  LibWebSockets LibWebSockets是用C/C语言写的,可定制性更强。从TCP监控开始到数据包完成,我们都可以参与编程。

  我们可以从下面的命令中获得源代码

  Git克隆git://git . warm cat . com/libweb sockets

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: