【WebSocket】WebSocket介绍
1.背景
WebSocket和http协议一样是应用层的协议,都是基于tcp的。在WebSocket出现之前客户端向服务器发出请求是通过http协议实现的,而http协议有个特点是通行请求只能由客户端发起,然后服务端响应查询结果,HTTP 协议没法让服务器主动向客户端推送信息。这样如果服务器有连续的状态变化,比如新消息,客户端要获知就非常麻烦,只能通过轮询,长轮询的方式,但是这样的效率很低,消耗了不必要的服务器资源(因为必须不停发送http连接,或者http连接保持始终打开。在 HTTP1.1 协议中的 keep-alive connection 是指在一次 TCP 连接中完成多个 HTTP 请求,但是对每个请求仍然要单独发 header,所以这些方式服务器和客户端还要大量交换 httpheader,信息交换效率很低)。
2.WebSocket简介
WebSocket 协议就是可以使服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,全双工的方式通信,属于服务器推送技术的一种。
3.WebSocket原理
WebSocket是基于C/S架构,WebSocket是由Http协议握手而来。当客户端与服务端通信,客户端首先向服务端发起http请求,而这个请求的特殊性在于客户端在http头部(header)里带了一个upgrade字段,告诉服务端它想要生成WebSocket协议,服务端收到之后给客户端一个握手的确认,回答客户端允许它对WebSocket协议的转换,一旦完成这个协商后,客户端和服务端的底层tcp连接是没有中断的,接下来客户端可以向服务端发送基于WebSocket协议的消息,这样就完成了HTTP协议向WebSocket协议的升级,而两端则继续复用HTTP底层socket的链接完成后续的通信。WebSocket传输单元是message,由于当传递很大的数据包时候,message会被切分成多个frame帧来传输,我们编程的时候无需关注底层的frame,只需要操作message。
4.WebSocket特点
(1)建立在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通信高效。
(4)可以发送文本,也可以发送二进制数据。
(5)没有同源限制,客户端可以与任意服务器通信。
(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
如下:
ws://example.com:80/path
(7)Websocket为一次HTTP握手后,后续通讯为tcp协议的通讯方式。
5.WebSocket应用场景
1)心跳包。
2)网页即时通信:聊天应用程序仅使用WebSocket建立一次连接,便能在订阅户之间交换,发布和广播消息。它重复使用相同的WebSocket连接,用于发送和接收消息以及一对一的消息传输。
3)游戏应用程序:在游戏应用程序中,你可能会注意到,服务器会持续接收数据,而不会刷新用户界面。屏幕上的用户界面会自动刷新,而且不需要建立新的连接,因此在WebSocket游戏应用程序中非常有帮助。
6.WebSocket后端技术选型
1.nodejs:WebSocket本身主要是应用于浏览器,属于浏览器里面的一种编程,对于前端开发nodejs比较熟悉,可以使用nodejs做长链接。不过nodejs还是js,js本身特性是单线程模型,虽然可以多进程,但是推送性能有限。
2.c/c++:使用c/c++实现WebSocket,成本比较高,可能需要手动实现对WebSocket协议对封装。
3.golang:编译型语言,速度快,多线程,实现并发容易,基于协程模型并发。所以开发起来比较简单,可以让我们更加专注于业务。其次有内置标准的WebSocket标准库,无需造轮子。
7.使用go语言完成WebSocket开发
使用go语言的 gorilla/websocket 第三方开发包来开发WebSocket 服务。
下载包:go get github.com/gorilla/websocket
利用这个开发包开发WebSocket 服务很简单,下面有个demo
package main import (
"net/http"
) func wsHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("websocket connected success!"))
} func main() {
http.HandleFunc("/ws",wsHandler)
http.ListenAndServe("0.0.0.0:7777",nil)
}
然后运行,打开浏览器,运行成功

【WebSocket】WebSocket介绍的更多相关文章
- HTML5 WebSocket 技术介绍
WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时向前端推送消息,以保证前后台状态统一,在传统的无状态HTTP协议中,这 ...
- WebSocket简单介绍
Java后端WebSocket的Tomcat实现 一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSoc ...
- HTTP协议系列(3)---包括WebSocket简单介绍
一.HTTPS HTTP是超文本传输协议,那HTTPS是什么尼?要明白HTTPS是什么先要明白HTTP的缺点,想一下我们在使用HTTP的时候会有那些缺点尼? 1.通信使用的明文(不加密),内容 ...
- Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。
Real-Time Apps with WebSocket, Socket.IO, and DerbyJS 实时程序的使用变得越来越广泛,如传统的交易,游戏,社交,开发工具DevOps tools, ...
- WebSocket简单介绍(1)
HTML5作为下一代WEB标准,拥有许多引人注目的新特性,如Canvas.本地存储.多媒体编程接口.WebSocket等等.今天我们就来看看具有“Web TCP”之称的WebSocket. WebSo ...
- 服务端向客户端推送消息技术之websocket的介绍
websocket的介绍 在讲解WebSocket前,我们先来看看下面这种场景,在HTTP协议下,怎么实现. 需求: 在网站中,要实现简单的聊天,这种情况怎么实现呢?如下图: 当发送私信的时候,如果要 ...
- Html5 WebSocket详细介绍
什么是WebSocket?看过html5的同学都知道,WebSocket protocol 是HTML5一种新的协议.它是实现了浏览器与服务器全双工通信(full-duplex).HTML5定义了We ...
- WebSocket简单介绍(WebSocket 实战)(3)
这一节里我们用一个案例来演示怎么使用 WebSocket 构建一个实时的 Web 应用.这是一个简单的实时多人聊天系统,包括客户端和服务端的实现.客户端通过浏览器向聊天服务器发起请求,服务器端解析客户 ...
- WebSocket简单介绍(WebSocket JavaScript 接口)(2)
上一节介绍了 WebSocket 规范,其中主要介绍了 WebSocket 的握手协议.握手协议通常是我们在构建 WebSocket 服务器端的实现和提供浏览器的WebSocket 支持时需要考虑的问 ...
- webSocket 简单介绍
WebSocket :WebSocket协议支持(在受控环境中运行不受信任的代码的)客户端与(选择加入该代码的通信的)远程主机之间进行全双工通信. 简单的说 ...
随机推荐
- Java基础小知识笔记
1. Integer转进制的一个类2. toBinaryString,toOctalString,toHexString.(转为二进制,八进制,十六进制的方法)3. 如果·数据的大小没有超过byte/ ...
- html和css的使用方法以及样式
布局步骤 第一步: 清除默认样式第二步: 划分模块第三步: 设置模块的大小以及位置第四步: 划分下一级模块 html和css 引入网页头像 <link rel="shortcut ic ...
- Odoo:全球第一免费开源ERP库龄表的简单实现方法(无需二开)
问题背景 希望查看库龄超过30天的货物,该如何实现?此种简单数据查询需要二开吗? 解决方案 方法一:Stock Quant列表视图增加过滤器 <filter string="库龄超30 ...
- Mac电脑 怎么导出安卓手机的相册
1.mac上下载一个HandShaker 2.把电脑和手机设置在同一个wifi下 3.安卓手机上下载一个HandShaker 参考:https://zhidao.baidu.com/question/ ...
- 简单易懂的单元测试框架-gtest(一)
简介 gtest是google开源的一个单元测试框架,以其简单易学的特点被广泛使用.该框架以第三方库的方式插入被测代码中.同其他单元测试框架相似,gtest也通过制作测试样例来进行代码测试.同 ...
- PHPstorm快捷键Ctrl + Alt + Left 或Right不起作用
最近遇到一个问题,就是安装的phpstorm的回撤快捷键不起作用了,死活用不了!折磨了好久,终于找到解决方法了,具体请看我的github文章: 快捷键Ctrl + Alt + Left 或Right不 ...
- 课堂练习6--统计txt文本
统计文本中26个字母的频率: package bao; import java.io.BufferedReader; import java.io.FileReader; import java.io ...
- 2019年3月8日_CCF-A类文章分享
3月8日下午3点开始,王利朋老师主持实验室会议,实验室全体人员参加.首先王利朋老师就基全本子存在的问题进行了再一次的说明以及如何修改部分内容, 其次,王利朋老师对近段时间做了相关工作总结和下阶段任务分 ...
- iOS 友盟错误分析-2019
友盟的错误分析越来越人性化了 前提集成了友盟统计,并打包的时候保留了.dSYM文件 先看看效果 可以看到bug显而易见的被发现了!那个文件夹,那一行代码 那么怎么才能这样呢 首先加入符号表,就是.dS ...
- 关联分析中寻找频繁项集的FP-growth方法
关联分析是数据挖掘中常用的分析方法.一个常见的需求比如说寻找出经常一起出现的项目集合. 引入一个定义,项集的支持度(support),是指所有包含这个项集的集合在所有数据集中出现的比例. 规定一个最小 ...