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 ...
随机推荐
- 基于OpenGL编写一个简易的2D渲染框架-12 重构渲染器-BlockAllocator
BlockAllocator 的内存管理情况可以用下图表示 整体思路是,先分配一大块内存 Chunk,然后将 Chunk 分割成小块 Block.由于 Block 是链表的一个结点,所以可以通过链表的 ...
- mongodb基础学习4-游标
今天来讲讲游标的操作,可以先获取一组文档,再对每一个文档进行操作. 因为mongodb底层是js引擎,所有可以像操作js一样操作mongodb,比如插入数据 游标的使用:声明游标,判断是否有下一条数据 ...
- China cuts bank reserves by $100m to cushion US tariffs
China cuts bank reserves by $100m to cushion US tariffs中国央行定向降准释放千亿美元资金China is cutting the amount o ...
- IPMS 元件实作
一.改用zg框架的jsp 1.引入表头和表尾jsp <%@ include file="../../jsp/menuHeader.jsp"%> <%@ inclu ...
- Centos 安装Mongo DB
NOSQL在很短的时间里使用人数据高涨,这不仅是它提出的一种新存储思想,更是因为它在对大数据做操作的效率,明显高于关系数据库 工具/原料 接入Internet的一台Centos计算机 下载安装文件 ...
- 《Visual C++开发实战1200例 第1卷》扫描版[PDF]
[内容简介:] <Visual C++开发实战1200例(第1卷)>是“软件开发实战1200例”丛书之一.<Visual C++开发实战1200例(第1卷)>,编程实例的四库全 ...
- Date.parse和new Date(str)的兼容性问题
Date.parse和new Date(str)的兼容性问题 Date '2015-05-04'是无法被各个浏览器中,使用new Date(str)来正确生成日期对象的. 正确的用法是'2015/05 ...
- 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)
要求:以左右孩子表示法实现链式方式存储的二叉树(lson—rson),以菜单方式设计并完成功能任务:建立并存储树.输出前序遍历结果.输出中序遍历结果.输出后序遍历结果.交换左右子树.统计高度,其中对于 ...
- codeblocks c++11 pthread
支持c++11: setting->compiler-> 打上勾即可.(如果没有c++11,那么请更新codeblocks最新版.) pthread_create错误: 由于pthread ...
- rubber
rubber - 必应词典 美['rʌbər]英['rʌbə(r)] n.橡胶:橡皮:黑板擦 v.涂橡胶于…:〈美俚〉同“rubberneck” 网络橡皮擦:胶皮:橡皮轮胎 变形复数:rubbers: