Websocket 原理

1 > websocket 与httphtml

websocket约定了一种通讯规范,经过一个握手机制,客户端和服务器之间能创建一个相似tcp的链接,从而方便它们的通讯。websocket出现以前,web交互通常是基于http协议的短链接或长链接。web

 

补充:http是运行在TCP协议传输层上的应用协议;websocket是经过http协议协商如何链接,而后独立运行在TCP协议传输上的应用协议;websocket仅仅是利用了http协议作链接请求;websocket之因此能持久链接的缘由:它运行在TCP协议上,TCP协议自身是长链接协议。ajax

为何http不是长链接?早期的http在发起每一个请求,响应完成后就会关闭Socket,但后来加了多路复用keepAlive协议后http协议已经能够实现长链接。浏览器

 

2> Websocket是什么协议,具备什么优势?服务器

 Websocket 是一个持久化的协议,而http非持久的协议;websocket

http的生命周期经过Request来界定,一个request只能有一个response,且response是被动的,不能主动发起;并发

websocket是基于http协议的,或者说借用了http的协议来完成一部分握手;socket

websocket协议:双向通讯,协议分为2部分:握手阶段、数据通讯阶段;tcp

websocket链接服务器的URI以“ws”或“wss”开头, ws开头的默认TCP端口为80,wss开头的默认端口是443;oop

 

补充:除了websocket 可实现实时信息传递,还有:

  1)ajax轮询:让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息

  2)http long poll:long poll 原理跟ajax轮询差很少,都是采用轮询的方式,不过采用的是阻塞模型(客户端发起链接后,若是没消息,就一直不返回Response给客户端,直到有消息才返回,返回完以后,客户端再次创建链接loop)

总结:ajax轮询:须要服务器有很快的处理速度和资源;

   long poll :须要有很高的并发,也就是说同时接待客户的能力;

  不然 上面2者都会报错:503 Server Unavailable

 

3> websocket 解决了http的难题:

  被动性:当服务器完成协议升级后(http->websocket),服务端就能够主动推送信息给客户端

  反复解析http协议,查看indentity info:websocket只须要一次http握手,因此说整个通信过程创建在一次链接/状态中,也就避免了http的非状态性,服务端会一直知道你的信息,直到你关闭请求。

 

4>下面的代码片断是打开一个链接,为链接建立事件监听器,断开链接,消息时间,发送消息返回到服务器,关闭链接。

CODE:
// 建立一个Socket实例
var socket = new WebSocket('ws://localhost:8080'); 

// 打开Socket 
socket.onopen = function(event) { 

  // 发送一个初始化消息
  socket.send('I am the client and I\'m listening!'); 

  // 监听消息
  socket.onmessage = function(event) { 
    console.log('Client received a message',event); 
  }; 

  // 监听Socket的关闭
  socket.onclose = function(event) { 
    console.log('Client notified socket has closed',event); 
  }; 

  // 关闭Socket.... 
  //socket.close() 
};

 

 

 https://www.cnblogs.com/netqq/p/5786750.html

相关文章
相关标签/搜索