1. 长链接技术介绍

说到websocket,必须讲到在它之前的各种长链接技术,比如轮循,长轮循,sse等。长链接顾名思义,就是让客户端浏览器与服务器端保持长久的连接,并能持续通讯,它还有一个特点,就是反向ajax,或叫服务器推技术。也就是说,服务器端也能通过这些手段实现向客户端推送的技术,比如,在现实应用中,看到的股票数据实时更新,这是通过这种技术来实现的。因为服务器端无法主动的向客户端推送数据,只能通过客户端连接上服务器端,然后被动地推送数据,这些连接到服务器端或者服务器端向客户端发送数据的方法就可以分成很多种,比如最简单的就是通过ajax隔一段时间发送http请求。

像轮循,长轮循等技术并不能实现真正意义上的实时,它是模拟型的实时,它发送的是完整的http请求。下面来具体说一下每个技术的特点。

1.1 轮循

轮循,也叫短轮循,英文名也叫Polling。它很简单,只是用ajax隔一段时间,可能是1秒,2秒,时间自己设定,向服务器发送请求。这种方案会频繁地与服务器通讯,每次通讯都是发送完整的http请求,如果服务器经常有数据变动,有回应还好,有时候发送的请求都是没有意义,都是在等服务器端的回应,而服务器又没有任何改变,所以这种方式很消耗网络资源,很低效。

1.2 长轮循

长轮循是对定时轮询的改进和提高,目地是为了降低无效的网络传输。这种方式也是通过ajax请求发送数据到服务器端,服务器端一直hold住这个连接,直到有数据到达,通过这种机制来减少无效的客户端和服务器间的交互,比如可以通过这种方式实现简易型的聊天室,但是,如果服务端的数据变更非常频繁的话,或者说访问的人非常多的时候,这种机制和定时轮询比较起来没有本质上的性能的提高。

1.3 HTML5 服务器推送事件

英文名也叫HTML5 Server Sent Events (SSE) / EventSource。SSE是html5规范的一部分,它是一种流技术,它的规范由两部分组成,第一个部分是服务器端与浏览器端之间的通讯协议,第二部分则是在浏览器端提供 JavaScript 使用的 EventSource 对象。服务器端的响应的内容类型是“text/event-stream”,响应文本的内容可以看成是一个事件流,它能够持续不断地向服务器端推送数据。不过这种技术很难跨域,且对IE的支持并不好,但也不能代表这种技术是没用或过时的,用它结合PostgreSQL的notify,或者Redis的pub/sub可以轻易构建聊天室。

2. websocket

上述的几种方法不代表就是过时没用的,相反,在某一程度上,它们还在应用中,只是,现在我们要来介绍一种更为好,更实时的技术,它叫websocket。它也是一种协议,它是基于tcp协议的,它跟http协议同级,它在浏览器层次发挥作用,可以由http协议升级为ws协议,就像是http加个安全通道升级为https协议一样。它的原理是这样的,由于它是一个协议,它不用发送跟http同样多的头信息,它比较轻量,速度快。为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息”Upgrade: WebSocket”表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。

在github.com或trello.com等应用就可以看到websocket的使用。比如,github上的:

请求
Request URL:wss://live.github.com/_sockets/NzQwNjQzOjA4NmI3MGI3ODE2N2JmNGI2OTkwNTI1MzA3NjVjNjYxOjgxYTFjMzVlYTE0NDBkYTUxYjllNTc2NmNjYmE1MDg0ZWY2M2ZiZDQ1NWFmOTM5MWIwMmNlYTMzOGZlYWIwMzY=--46b941101badcb9affe775bd52bf902d4b57468c
Request Method:GET
Status Code:101 Switching Protocols响应头信息
Response Headers
Connection:Upgrade
Sec-WebSocket-Accept:ihEYOEOsteVV84Y2koOeMRELVT8=
Server:GitHub.com
Upgrade:websocket请求头信息
Request Headers
Connection:Upgrade
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:+wcmQ7sbHbIF7K/sGpkOKw==
Sec-WebSocket-Version:13
Upgrade:websocket

本篇完结。

下一篇:websocket之客户端与服务器端的交互(二)

websocket 之入门 (一)相关推荐

  1. WebSocket 从入门到精通 -- Spring boot服务端客户端 -- HTML客户端

    注意:学习本文章一定要打开自己的开发工具,代码中有详细的解释.电脑不在身边建议先收藏,方便日后观看.最后祝大家技术突飞猛进,早日拿到心仪的offer. WebSocket -- 从入门到精通 基础讲解 ...

  2. WebSocket协议入门介绍

    文章目录 WebSocket协议是什么 WebSocket是应用层协议 WebSocket与Http的区别 为什么要使用WebSocket 如何使用WebSocket 客户端API 在客户端使用Web ...

  3. WebSocket新手入门指南

    文章目录 介绍 WebSocket 的原理,了解原理后,用起来更放心大胆: 类似技术对比,搞清楚自己的业务场景是不是需要使用 WebSocket: 使用过程中的经验分享,让你少走一些弯路: 1 Web ...

  4. websocket之二:WebSocket编程入门

    一.WebSocket客户端 websocket允许通过JavaScript建立与远程服务器的连接,从而实现客户端与服务器间双向的通信.在websocket中有两个方法: 1.send() 向远程服务 ...

  5. WebSocket快速入门及基本使用

    近期工作中经常使用到WebSocket协议,所以和大家分享一下WebSocket的相关内容,也借此机会整理一下自己的思绪. HTTP协议(半双工通信) 介绍 WebSocket 前 我们先看看常用的H ...

  6. WebSocket协议入门:WebSocket API

    HTML5连接性领域包括WebSocket.服务器发送事件和跨文档消息传递(Cross-Document Messaging)等技术.在HTML5之前,浏览器窗口和框架之间的通信由于安全的原因而受到限 ...

  7. HTML5 WebSocket的入门使用

    HTML5 WebSocket:长连接,客户端与服务端可以保持长时间的通信. 一.具体步骤: 1.创建一个websocket实例,连接远程服务器并且需要一个连接服务器的url let baseUrl ...

  8. WebSocket 从入门到写出开源库

    https://blog.csdn.net/weixin_34009794/article/details/88216246

  9. js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...

    本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...

最新文章

  1. 单列索引和复合索引的使用
  2. 用 Jackson 来处理 JSON
  3. 获取jar中的资源文件途径
  4. php多文件上传类源码,PHP单文件上传类或多文件上传类源码
  5. shell写入文件,后面会覆盖前面
  6. sendRedirec forward
  7. 值类型和引用类型及其区别!
  8. jinja2 中的 Template 批量替换json字符串中的内容
  9. 直接访问 可以拿到cookie 本地起的服务拿不到 cookie_微服务下的分布式session管理...
  10. “我要彻底放弃 Debian 操作系统!”
  11. Mysql 的优化方式,都给你整理好了(附思维导图)
  12. 【协议森林】IPv6过渡技术之隧道和翻译技术
  13. Go语言使用RabbitMQ
  14. linux飞信机器人,linux 使用飞信机器人
  15. Python爬取淘宝商品信息
  16. 常见的知识图谱(Wikidata、YAGO、ConceptNet、DBpedia)
  17. Python:peewee常用操作CRUD
  18. idea打不开,双击没反应的解决方案
  19. ffmpeg C代码音频解码
  20. SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离

热门文章

  1. Tomcat 输入http://localhost:8080打不开网页的解决方法
  2. 什么是单页面应用程序
  3. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ
  4. Android模拟位置出错IllegalArgumentException: Incomplete location object, missing timestamp or accuracy?
  5. zookeeper单机安装
  6. jetty for linux 启用日志
  7. Java使用多线程发送消息
  8. jQuery学习之:Validation表单验证插件
  9. spring入门:beans.xml不提示、别名、创建对象的三种方式
  10. python实现计算器