HTML5入门

《精通HTML5编程》第六章:WebSocket API

字号+ 作者: 来源: 2014-11-16 20:49 我要评论( )

统的HTTP都是基于请求响应模型的,客户端和服务器端无法实现实时通信。之前有一种模仿实时通信的技术,从轮循、长轮循到comet都不能彻底解决问题。WebSocket的出现改变了现状,上百

 统的HTTP都是基于请求响应模型的,客户端和服务器端无法实现实时通信。之前有一种模仿实时通信的技术,从轮循、长轮循到comet都不能彻底解决问题。WebSocket的出现改变了现状,上百倍的减少通信中无用的消息头,极大的提高了通信效率的同时也提供了非常低地的延时。


WebSocket请求和回复的消息头如下:

From client to server:
GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4@1 46546xW%0l 1 5
Origin: http://example.com
[8-byte security key]
From server to client:
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://example.com
WebSocket-Location: ws://example.com/demo
WebSocket-Protocol: sample
[16-byte hash response]

原书上有一个python写的简单的WebSocket EchoServer的实现,我就不贴代码了,大家用Nodejs实验吧。

检测浏览器支持:

JavaScript Code复制内容到剪贴板
  1. function loadDemo() {    
  2.     if (window.WebSocket) {    
  3.         document.getElementById("support").innerHTML = "HTML5 WebSocket is supported in your browser.";    
  4.     } else {    
  5.         document.getElementById("support").innerHTML = "HTML5 WebSocket is not supported in your browser.";    
  6.     }    
  7. }     
 
WebSocket的使用

巨简单无比,一段代码就可以说明:
XML/HTML Code复制内容到剪贴板
  1. <!DOCTYPE html>    
  2. <title>WebSocket Test Page</title>    
  3. <script>    
  4. var log = function(s) {    
  5.     if (document.readyState !== "complete") {    
  6.         log.buffer.push(s);    
  7.     } else {    
  8.         document.getElementById("output").innerHTML += (s + "\n");    
  9.     }    
  10. }    
  11. log.buffer = [];    
  12. url = "ws://localhost:8080/echo";    
  13. w = new WebSocket(url);    
  14. w.onopen = function() {    
  15.     log("open");    
  16.     w.send("thank you for accepting this WebSocket request");    
  17. }    
  18. w.onmessage = function(e) {    
  19.     log(e.data);    
  20. }    
  21. w.onclose = function(e) {    
  22.     log("closed");    
  23. }    
  24. window.onload = function() {    
  25.     log(log.buffer.join("\n"));    
  26.     document.getElementById("sendButton").onclick = function() {    
  27.         w.send(document.getElementById("inputMessage").value);    
  28.     }    
  29. }    
  30. </script>    
  31. <input type="text" id="inputMessage" value="Hello, WebSocket!"><button    
  32. id="sendButton">Send</button>    
  33. <pre id="output"></pre>    

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 《精通HTML5编程》第十一章:尚未广泛支持的新特

    《精通HTML5编程》第十一章:尚未广泛支持的新特

    2014-11-16 20:49

  • 《精通HTML5编程》第十章:离线应用和尚未广泛支

    《精通HTML5编程》第十章:离线应用和尚未广泛支

    2014-11-16 20:49

  • 《精通HTML5编程》第九章:Web Sotrage API

    《精通HTML5编程》第九章:Web Sotrage API

    2014-11-16 20:49

  • 《精通HTML5编程》第八章:HTML5 Web Worker API

    《精通HTML5编程》第八章:HTML5 Web Worker API

    2014-11-16 20:49

网友点评
a