首页 > 编程语言 > 详细

Web Sockets----(《JavaScriopt高级程序设计》学习笔记)

时间:2018-05-25 01:04:39      阅读:332      评论:0      收藏:0      [点我收藏+]

Web Sockets 

相关知识

  Web Sockets 的目标是在一个单独的持久连接上提供全双工、双向通信。在JavaScript中创建了Web Sockets之后,会有一个HTTP请求发送到浏览器以发起连接。在取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为Web Sockets协议。也就是说,使用标准的HTTP服务器无法实现Web Sockets,只有支持这种协议的专门服务器才能正常工作。

  由于Web Sockets使用了自定义协议,所以URL模式也略有不同。未加密的连接是ws:// ;加密的是wss://。

  使用自定义协议而非HTTP协议的好处是,能够在客户端和服务器之间发送非常少量的数据,而不必担心HTTP那样字节级的开销。由于传递的数据包很小,因此Web Sockets非常适合移动应用。毕竟对移动应用而言,带宽和网络延迟都是关键问题。

Web Sockets API

1. 创建Web Socket

  先实例一个WebSockets对象并传入要连接的URL,例如:(注意:传入绝对URL,虽然同源策略对Web Socket不适用,但能否与某个域通信,完全取决于服务器)

  var sockets = new WebSocket("ws://www.example.com/sever.php");

  Web Socket 表示当前状态的readyState属性值:

    ①WebSocket.OPENING(0):正在建立连接。

    ②WebSocket.OPEN(1):已经建立连接。

    ③WebSocket.CLOSING(2):正在关闭连接。

    ④WebSocket.CLOSE(3):已经关闭连接。

  要关闭Web Socket 连接,可以在任何时候调用close() 方法。

2. 发送和接受数据

  使用 send() 方法并传入任意字符串,例如:

  var socket = new WebSocket("ws://www.example.com/sever.php");

  socket.send("Hello World") ;

  如果要发送复杂的数据结构,请先将数据序列化为一个JSON字符串,再发送给服务器,例如:

  var message = {

    time: new Date(),

    text: "hello world"

   }

  socket.send(JSON.stringify(message));

  服务器读取其中数据后,解析接受到的JSON字符串。当服务器向客户端发来数据时,WebSocket对象会触发message事件,并把放回的数据保存在event.data 属性中。

  socket.onmessage = function(event){

    var data =  event.data;   //返回的event.data 也是字符串

    //do something

  }

3. 其他事件

  WebSocket 对象还有其他三个事件,在连续生命周期的不同阶段触发。

    ①open:在成功建立连接时触发。

    ②error:在发生错误时触发,连接不能持续。

    ③close:在连接关闭时触发。

  其中close事件的event对象有三个额外的属性:

    ①wasClean:布尔值,表示连接是否已经明确关闭。

    ②code:服务器返回的数据状态码。

    ③reason:字符串,包含服务器发回的消息。

最后:

  常见使用 WebSocket 的情况:(在无法选择Web Socket的情况下,组合XHR 和 SSE 也能实现双向通信)

    ①有专门的服务器,

    ②用例之间必须双向通信(如聊天室)。

 

Web Sockets----(《JavaScriopt高级程序设计》学习笔记)

原文:https://www.cnblogs.com/hellobin/p/9085861.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!