1、什么是webSocket?
      webSocket是H5提出的一个协议规范,webSocket约定了一个通信的规范,通过一个握手的机制,客户端和服务端,就能建立一个类似TCP的连接,从而方便客户端和服务端之间的通信,在webSocket出现之前,web交互一般是基于Http的短连接或者长连接,webSocket同时,是为解决客户端与服务端实时通信而产生的技术,WebSocket协议本质上是一个基于TCP 的协议,是先通过HTTP/HTTPS协议,发起一条特殊的HTTP请求,进行握手后,用于交换数据的TCP连接,此后,服务端与客户端通过此TCP连接进行实时通信,注意当webSocket的客户端与服务器端进行通信以后,此时就不再需要之前进行握手请求的HTTP协议的参与了.
2、webSocket的优点
       首先,webSocket节省通信开销,以前webServer实现推送技术,或者及时通信,用的都是轮询,在特定的时间间隔,比如1s由浏览器自动发起请求,将服务器的消息主动拉回来,在这种情况下,需要不断向服务器发送请求,然而HTTP Request 的Header是非常长的,其中包含的数据可能是一个很小的值,这样会占用很多的带宽和服务器资源,
      其次,服务器主动传送数据给客户端,webSocket最伟大的地方就是服务器和客户端可以在给定的时间范围内,任意时刻相互推送信息,浏览器和服务器只需要做一个握手的动作,在建立连接之后,服务器可以主动传送数据给客户端,客户端也可以随时向服务端发送数据,此外,服务器与客户端之间交换的标头信息也是非常小的.
      最后,特点是实时通信,webSocket不仅限于以AJAX通信,因为AJAX技术需要客户端发起请求,而webSocket服务器和客户端可以彼此相互推送信息,从而实现实时通信.
3、webSocket如何建立连接
      (1)由客户端发起握手请求
      (2)服务端响应请求
      (3)连接建立
具体流程是建立一个webSocket连接,客户端或浏览器向服务器发起一个HTTP请求,这个请求和普通的HTTP请求不同,包含了一些附加头信息,其中就有一个头信息叫做upgrade webSocket,服务器端解析这些附加头信息,然后生成应答消息响应给客户端,客户端就与服务器端建立了响应的连接,这就是webSocket建立连接的过程.
4、webSocket的生命周期
       首先,是打开事件,这个事件它是发生在新的连接时调用,此事件发生在端点上建立连接时,并且在任何其他事件发生之前,此事件伴随着三部分信息,webSocket fashion对象,用于表示已经建立好的连接,配置对象包含了用户配置端点的信息,一组路径参数,用于打开阶段握手时,webSocket 端入栈匹配的uri,这就是打开事件.
       其次,是消息事件.主要是接收webSocket 的对话中另一端发送的消息,连接上消息将以三种方式抵达,一个是文本消息,二进制消息,或者胖消息,最基本的形式是选择使用带stream参数方法来处理文本消息,ByteBuffer或者Byte数组参数的方法,来处理二进制文本消息,如果是仅仅处理胖消息,则可以使用Java webSocket API中的pangMessage接口的一个实例,这就是消息事件.
       其次,是错误事件,它是webSocket 在连接或者端点发生错误时产生,可以处理webSocket 实现处理入栈消息时,发生的任何异常,处理入栈消息时,可能会发生三种错误基本类型webSocket 建立连接的时候可能会发生错误,这些异常属于sessionException异常类型,其次,错误可能会发生在当webSocket 实现试图将入栈消息解码成开发人员所需要的开发对象时,此类错误都是decodeException异常类型.最后,是由webSocket 的其他方法产生的运行时错误,webSocket 实现将记录webSocket 端点操作过程中产生的任何异常.
      最后,关闭事件.表示webSocket端点的连接关闭,在webSocket连接时做其他的通用清理工作,它可以由参与连接的任意一个端点发出,
4、webSocket连接关闭
       webSocket 提供了两种关闭方式,一种是服务器关闭底层TCP连接,另一种是客户端发起TCP Close,底层的TCP连接正常情况下,应该首先由服务器关闭,在异常情况下,客户端可以发起TCP Close,因此当服务器被指示关闭webSocket 连接时,它应该发起一个TCP Close操作,客户端应该等待服务端的TCP Close,这就是webSocket 关闭TCP连接的整个流程.
 

Netty学习第四节WebSocket入门的更多相关文章

  1. abp学习(四)——根据入门教程(aspnetMVC Web API进一步学习)

    Introduction With AspNet MVC Web API EntityFramework and AngularJS 地址:https://aspnetboilerplate.com/ ...

  2. Netty 学习(四):ChannelHandler 的事件传播和生命周期

    Netty 学习(四):ChannelHandler 的事件传播和生命周期 作者: Grey 原文地址: 博客园:Netty 学习(四):ChannelHandler 的事件传播和生命周期 CSDN: ...

  3. VUE2.0实现购物车和地址选配功能学习第四节

    第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...

  4. Netty学习第四章 spring boot整合netty的使用

    现在大多数项目都是基于spring boot进行开发,所以我们以spring boot作为开发框架来使用netty.使用spring boot的一个好处就是能给将netty的业务拆分出来,并通过spr ...

  5. JPA学习---第四节:JPA实例与JPA主键生成策略

    1.编写实体类,代码如下: package learn.jpa.bean; import javax.persistence.Entity; import javax.persistence.Gene ...

  6. Netty学习笔记(四) 简单的聊天室功能之服务端开发

    前面三个章节,我们使用了Netty实现了DISCARD丢弃服务和回复以及自定义编码解码,这篇博客,我们要用Netty实现简单的聊天室功能. Ps: 突然想起来大学里面有个课程实训,给予UDP还是TCP ...

  7. Netty学习第五节实例进一步学习

    概念理解: Netty是基于NIO的框架  传统IO与NIO的区别:       1.传统IO会造成阻塞点:       2.单一的客户端处理消息 解决阻塞问题:建立线程池,达到收到一个消息就建立一个 ...

  8. Netty学习笔记(四)——实现dubbo的rpc

    1.rpc基本介绍 RPC ( Remote Procedure Call) -远程过程调用,是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,两个或多个应用程序分布不同 ...

  9. Python学习-第四节:常用模块-logging,re,time

    1:logging模块 import logging logging.debug('This is debug message') logging.info('This is info message ...

随机推荐

  1. 机器学习入门-随机森林温度预测的案例 1.datetime.datetime.datetime(将字符串转为为日期格式) 2.pd.get_dummies(将文本标签转换为one-hot编码) 3.rf.feature_importances_(研究样本特征的重要性) 4.fig.autofmt_xdate(rotation=60) 对标签进行翻转

    在这个案例中: 1. datetime.datetime.strptime(data, '%Y-%m-%d') # 由字符串格式转换为日期格式 2. pd.get_dummies(features)  ...

  2. 迭代器iter()

    from collections import Iterable print(isinstance({},iterable)) # 判断是否可迭代 from collections import It ...

  3. vue基础——模板语法

    模板语法介绍 Vue.js使用了基于HTML的模板语法,允许开发者声明式地将dom绑定至底层Vue实例的数据.所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析. ...

  4. Axel与Wget下载工具

    Axel工具是linux下的http/ftp中强大下载工具,支持多线程和断点续传下载.且可以从多个地址或者从一个地址的多个连接来下载同一个文件. 常用的选项: [root@wjoyxt ~]# axe ...

  5. oracle rac 常见安装、管理错误

    1. 安装CRS失败,或执行root.sh报错,可能原因: (1) 节点间的时间不同步,解决方法:使用ntp服务 (2) Linux下启用了默认的防火墙,导致执行root.sh报错: Failure ...

  6. 判断TrueType字体

    function IsTrueTypeFont(FontName : string) : boolean;const  PITCH_MASK: byte = $0F;  var  TxMetric: ...

  7. uwsgi相关问题

    启动时报错: !!! no internal routing support, rebuild with pcre support !!!安装时 : sudo pip install uwsgi -I ...

  8. go,函数作为参数类型

    package main import "fmt" type testInt func(int) bool // 声明了一个函数类型 func isOdd(integer int) ...

  9. gorm中数据库datetime类型的映射和time.Time的格式化

    如果在结构体中设置time变量的类型是time.Time,那么gorm取出来的时间格式将会是”2006-01-02 15:04:05.999999999 -0700 MST“东八区时间,在time.T ...

  10. 全排列12 · Permutations

    无重复 [抄题]: Given a collection of numbers, return all possible permutations. For example,[1,2,3] have ...