Netty学习第四节WebSocket入门
首先,webSocket节省通信开销,以前webServer实现推送技术,或者及时通信,用的都是轮询,在特定的时间间隔,比如1s由浏览器自动发起请求,将服务器的消息主动拉回来,在这种情况下,需要不断向服务器发送请求,然而HTTP Request 的Header是非常长的,其中包含的数据可能是一个很小的值,这样会占用很多的带宽和服务器资源,
3、webSocket如何建立连接
(1)由客户端发起握手请求
具体流程是建立一个webSocket连接,客户端或浏览器向服务器发起一个HTTP请求,这个请求和普通的HTTP请求不同,包含了一些附加头信息,其中就有一个头信息叫做upgrade webSocket,服务器端解析这些附加头信息,然后生成应答消息响应给客户端,客户端就与服务器端建立了响应的连接,这就是webSocket建立连接的过程.
首先,是打开事件,这个事件它是发生在新的连接时调用,此事件发生在端点上建立连接时,并且在任何其他事件发生之前,此事件伴随着三部分信息,webSocket fashion对象,用于表示已经建立好的连接,配置对象包含了用户配置端点的信息,一组路径参数,用于打开阶段握手时,webSocket 端入栈匹配的uri,这就是打开事件.
其次,是消息事件.主要是接收webSocket 的对话中另一端发送的消息,连接上消息将以三种方式抵达,一个是文本消息,二进制消息,或者胖消息,最基本的形式是选择使用带stream参数方法来处理文本消息,ByteBuffer或者Byte数组参数的方法,来处理二进制文本消息,如果是仅仅处理胖消息,则可以使用Java webSocket API中的pangMessage接口的一个实例,这就是消息事件.
其次,是错误事件,它是webSocket 在连接或者端点发生错误时产生,可以处理webSocket 实现处理入栈消息时,发生的任何异常,处理入栈消息时,可能会发生三种错误基本类型webSocket 建立连接的时候可能会发生错误,这些异常属于sessionException异常类型,其次,错误可能会发生在当webSocket 实现试图将入栈消息解码成开发人员所需要的开发对象时,此类错误都是decodeException异常类型.最后,是由webSocket 的其他方法产生的运行时错误,webSocket 实现将记录webSocket 端点操作过程中产生的任何异常.
最后,关闭事件.表示webSocket端点的连接关闭,在webSocket连接时做其他的通用清理工作,它可以由参与连接的任意一个端点发出,
webSocket 提供了两种关闭方式,一种是服务器关闭底层TCP连接,另一种是客户端发起TCP Close,底层的TCP连接正常情况下,应该首先由服务器关闭,在异常情况下,客户端可以发起TCP Close,因此当服务器被指示关闭webSocket 连接时,它应该发起一个TCP Close操作,客户端应该等待服务端的TCP Close,这就是webSocket 关闭TCP连接的整个流程.
Netty学习第四节WebSocket入门的更多相关文章
- abp学习(四)——根据入门教程(aspnetMVC Web API进一步学习)
Introduction With AspNet MVC Web API EntityFramework and AngularJS 地址:https://aspnetboilerplate.com/ ...
- Netty 学习(四):ChannelHandler 的事件传播和生命周期
Netty 学习(四):ChannelHandler 的事件传播和生命周期 作者: Grey 原文地址: 博客园:Netty 学习(四):ChannelHandler 的事件传播和生命周期 CSDN: ...
- VUE2.0实现购物车和地址选配功能学习第四节
第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...
- Netty学习第四章 spring boot整合netty的使用
现在大多数项目都是基于spring boot进行开发,所以我们以spring boot作为开发框架来使用netty.使用spring boot的一个好处就是能给将netty的业务拆分出来,并通过spr ...
- JPA学习---第四节:JPA实例与JPA主键生成策略
1.编写实体类,代码如下: package learn.jpa.bean; import javax.persistence.Entity; import javax.persistence.Gene ...
- Netty学习笔记(四) 简单的聊天室功能之服务端开发
前面三个章节,我们使用了Netty实现了DISCARD丢弃服务和回复以及自定义编码解码,这篇博客,我们要用Netty实现简单的聊天室功能. Ps: 突然想起来大学里面有个课程实训,给予UDP还是TCP ...
- Netty学习第五节实例进一步学习
概念理解: Netty是基于NIO的框架 传统IO与NIO的区别: 1.传统IO会造成阻塞点: 2.单一的客户端处理消息 解决阻塞问题:建立线程池,达到收到一个消息就建立一个 ...
- Netty学习笔记(四)——实现dubbo的rpc
1.rpc基本介绍 RPC ( Remote Procedure Call) -远程过程调用,是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,两个或多个应用程序分布不同 ...
- Python学习-第四节:常用模块-logging,re,time
1:logging模块 import logging logging.debug('This is debug message') logging.info('This is info message ...
随机推荐
- 可视化库-seaborn-热力图(第五天)
1. 画一个基本的热力图, 通过热力图用来观察样本的分布情况 import matplotlib.pyplot as plt import numpy as np np.random.seed(0) ...
- 下载gradle缓慢的解决方法
用AndroidStudio或者Qt编译apk,下载gradle缓慢时,可以用迅雷等下载工具在https://services.gradle.org/distributions/下载对应的版本. 中断 ...
- java web 跨域
服务器端解决跨域问题的三种方法 跨域是指html文件所在的服务器与ajax请求的服务器是不同的ip+port,例如: - ‘192.168.1.1:8080’ 与 ‘192.168.1.2:808 ...
- HIBERNATE知识复习记录2-继承关系
发现了一篇和我类似的学习尚硅谷视频写的文章,内容如下,比我说的详细全面,可以看一下: [原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , jo ...
- 刚刚安装完nginx,服务启动,通过浏览器无法访问的问题
查看Linux服务是否启动. ps -ef | grep nginx 解决办法:1,添加 80 段端口配置 firewall-cmd --zone=public --add-port=80/tcp - ...
- java多线程实例(2)
public class ThreadDemo05 { public static void main(String args[]) { // 四个售票点应该控制同一个资源 Demo d = new ...
- 【Java】JavaIO(二)、节点流
一.InputStream & outputStream Java字节流主要是以InputStream (输入流),outputStream(输出流)为基类,本身是抽象类不能创建实例,但是是字 ...
- js ParseUrl
js ParseUrl function parseURL(url) { var a = document.createElement('a'); a.href = url; return { sou ...
- js 触发 change 事件
首先,请各位包涵,我本人对 JS 不是很熟,不知道"触发change事件"和"触发onchange事件"哪个更加合适.有园友知道的麻烦指出,先行谢过. 起因是这 ...
- cubic与spline插值点处的区别
cubic与spline都是Matlab的三次样条插值法,但是它们在插值点处仍然有着很微妙的区别,这个区别说明不了两种方法的好坏,只能根据实际情况进行合理筛选.以一维插值为例: clc clear % ...