博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebSocket详解
阅读量:6877 次
发布时间:2019-06-26

本文共 1389 字,大约阅读时间需要 4 分钟。

WebSocket详解

因为 http 协议是单向的,之前如果服务器端有连续的变化需要通知客户端,只能通过客户端进行轮询(或者 long poll),但是轮询非常浪费资源,工程师们就发明了WebSocket。2011年成为国际标准,目前所有浏览器都已经支持了。

WebSocket 协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。这是百度百科的定义,非常容易理解。服务端主动推送消息到客户端解决了一大痛点,也是使用WebSocket的最大原因。
在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

特点

  1. 建立在TCP协议之上,服务器端容易实现。
  2. 与 HTTP 兼容良好,握手阶段采用 HTTP 协议。
  3. 性能开销小,通信高效。
  4. 可发送文本或二进制数据。
  5. 没有同源限制。

优势

一句话就是:持久化链接

相比于轮询和 long poll,WebSocket 带来的性能开销优势就是因为持久化链接。
简单说下轮询和 long poll,轮询就是每隔一段时间就请求,每次请求无论数据是否更新都要占据后台服务的资源,非常浪费,需要后台服务有很快的处理速度,long poll 就是发送请求后,直到服务器更新了才返回更新的信息,也很浪费,需要后台服务很好的处理高并发的能力。
对比一下,每条 http 请求需要经过 Nginx 转发到特定的后台服务,后台服务处理请求,而且因为是无状态的,每次都要解析头信息,搞的后台服务也很烦。而 WebSocket 与 Nginx 建立持久化链接后,后台服务与客户端通信变得非常高效。Nginx 能力很强,保持这种持久化链接小菜一碟。

使用

示例:

// Create WebSocket connection.const socket = new WebSocket('ws://localhost:8080');//// Connection openedsocket.addEventListener('open', function (event) {    socket.send('Hello Server!');});//// Listen for messagessocket.addEventListener('message', function (event) {    console.log('Message from server', event.data);});

详细 API 见

详细使用见

Socket.IO

了解 WebSocket 的时候很容易接触到 Socket.IO,两者关系:Socket.IO 是 WebSocket 在 node.js 和客户端的一种实现,这么说也不准确,因为他会在无法使用 Websocket 的时候采用其他代替方案实现类似持久链接。

这样描述应该跟准确:Socket.IO 是建立 node.js服务端与客户端之间持久链接的一个框架,会优先采用 WebSocket 协议。
其接口简单容易理解,参考

转载于:https://www.cnblogs.com/lihuanqing/p/8086363.html

你可能感兴趣的文章
鸟巢-一种全新的Native APP开发模式,这篇文章为您解读
查看>>
shell批量查询IP
查看>>
快速生成移动设备应用图标的在线工具 - makeappicon
查看>>
学习linux决心书
查看>>
SVN服务的搭建
查看>>
ISO 9126质量模型:软件质量模型的6大特性和27个子特性
查看>>
一个 rm -rf的教训
查看>>
几何画板添加背景图片方法
查看>>
用main函数传参做简单的计算器的代码
查看>>
Bash终端命令行,使用privoxy将socks代理转成http代理
查看>>
Linux基础命令
查看>>
if case 语句 find locate 文件查找 和 压缩解压缩工具 简介
查看>>
Linux常用命令——tr
查看>>
检测 ip 是否断开,并使用邮箱报警
查看>>
整理第一周学习C的知识点
查看>>
Spring Data JPA 实例查询
查看>>
ping多线程
查看>>
PMP每日一题
查看>>
python中struct.unpack的用法
查看>>
解决物理内存足够时VMware 提示物理内存不足。。。
查看>>