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 ...
随机推荐
- AS3 注意点
当主类new 一个主影片来放内容的时候.在gc此swf时,一定要检查此主影片是否存在,如 private function initStart() { //trace("RightMenu类 ...
- starling 第一天
flashplayer_27_sa_debug: https://files.cnblogs.com/files/dt1991/flashplayer_27_sa_debug.rar flashpla ...
- Simple2D-24 Sprite 渲染树
如果要开发游戏,单单使用 Painter 绘制图片会变得十分复杂.如果使用 Sprite 对象进行显示,可以简单地实现图片的位移.旋转和缩放,结合 Action 对象可以实现复杂的动画效果.最重要的是 ...
- UI5-文档-4.6-Modules
在SAPUI5中,资源通常被称为模块.在这一步中,我们将上次练习中的警报替换为sap.m库中的适当消息Toast.所需的模块可以异步加载. Preview A message toast displa ...
- gulp 用法 小结
前端们,gulp该用起来了,简单的demo入门 gulp.grunt前端自动化工具,只有用过才知道多么重要. 作者:一文不提来源:博客园|2015-05-28 10:35 移动端 收藏 分享 gulp ...
- Css 特性之 transition和transform
CSS 有一些新的属性,可以简化代码的书写,用简单的代码就可以实现复杂的变化.不用像 js 那样,需要写很多代码 这里主要介绍三个属性:transition ,transform,以及translat ...
- Solving SharePoint Server 2010 - 503. The service is unavailable, After installation
Installed: SharePoint Server 2010 for Internet Enterprise Beta (x64) On: Windows Server 2008 Standar ...
- python中的__name__=='__main__'如何简单理解(一)
1. 摘要: 通俗的理解_name_ == '_main_':假如你叫小明.py,在朋友眼中,你是小明(_name_ == '小明'):在你自己眼中,你是你自己(_name_ == '_main_') ...
- spring JPA分页排序条件查询
@RequestMapping("/listByPage") public Page<Production> listByPage(int page, int size ...
- HTTP Error 500.0 - Internal Server Error错误代码0x80070002
案例研究:AspNetInitClrHostFailureModule中的“HTTP错误500.0 - 内部服务器错误” 症状 当用户访问在Windows Server 2008 R2计算机上运行的A ...