Websocket 原理

1 > websocket 与http

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

 

补充:http是运行在TCP协议传输层上的应用协议;websocket是通过http协议协商如何连接,然后独立运行在TCP协议传输上的应用协议;websocket仅仅是利用了http协议做连接请求;websocket之所以能持久连接的原因:它运行在TCP协议上,TCP协议自身是长连接协议。

为什么http不是长连接?早期的http在发起每个请求,响应完成后就会关闭Socket,但后来加了多路复用keepAlive协议后http协议已经可以实现长连接。

 

2> Websocket是什么协议,具有什么优点?

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

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

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

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

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

 

补充:除了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

 

转载于:https://www.cnblogs.com/sjbhz/p/10040668.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它通过在客户端和服务器之间建立长连接,实现了双向通信。下面是 WebSocket 的工作原理: 1. 握手阶段:客户端发起 WebSocket 连接请求,发送一个特定的 HTTP 请求,包含协议升级请求头(Upgrade: websocket),服务器收到请求后进行协议升级确认。 2. 建立连接:服务器通过响应 HTTP 101 状态码表示升级成功,建立了一个持久连接。此时,WebSocket 连接由 HTTP 升级为 WebSocket 协议。 3. 数据传输:建立连接后,客户端和服务器可以在任意时间内相互发送消息。双方可以同时发送和接收消息,实现实时的双向通信。 4. 连接关闭:当某一方决定关闭连接时,发送一个关闭帧表示断开连接。另一方收到关闭帧后也关闭连接。 WebSocket 使用了一个称为 "数据帧" 的结构来传输数据。数据帧由一个标识位(用于标识帧的类型)、掩码标志位(用于数据加密)、数据长度字段和实际数据组成。 相比传统的 HTTP 请求-响应模式,WebSocket 具有以下优势: - 实时性:能够实现实时的双向通信,使得服务器能够主动向客户端推送数据。 - 减少通信量:WebSocket 连接建立后,可以发送少量的控制信息来维持连接,避免了重复建立和断开连接的开销。 - 更少的延迟:WebSocket 使用单个 TCP 连接,避免了 HTTP 的连接建立和关闭的开销,减少了通信的延迟。 希望以上解答对你有所帮助!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值