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. 【完结汇总】iKcamp出品基于Koa2搭建Node.js实战共十一堂课(含视频)

  2. Elon Musk

    人物事件 成长学习 年6月28日,埃隆·马斯克在南非的比勒陀利亚出生,他的 埃隆·马斯克 父亲是一名南非机电工程师,母亲是加拿大人,从事营养师兼模特.[8]  年,10岁的马斯克就拥有了自己的第一台电 ...

  3. .Spark Streaming(上)--实时流计算Spark Streaming原理介

    Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍 http://www.cnblogs.com/shishanyuan/p/474 ...

  4. phpStudy4——前端页面使用Ajax请求并解析php返回的json数据

    项目需求: 在html页面显示所有用户列表信息. 需求分析: 1. html页面使用ajax向后端php请求用户数据 2. php脚本查询数据库,并将查询后的结果以json格式返回前端html页面 3 ...

  5. tcp连接需要注意的问题

    当有子进程时,子进程终止时会返回SIGCHLD信号,默认忽略,此时会有僵尸进程. 处理方法: 捕获信号,并waitpid. 当慢系统调用被中断时(如信号中断),有些系统不会自动重启调用,此时系统调用可 ...

  6. 从RTTI谈C++的向下转型

    转自:http://blog.chinaunix.net/uid-28541347-id-4251713.html 从RTTI谈C++的向下转型 1.什么是RTTI? RTTI 是“Runtime T ...

  7. 查看端口号根据pid号找到相关占用端口应用

    查看端口号根据pid号找到相关占用端口应用   8080 端口被占用不知道被哪个应用软件占用,下面我来教你查出那个该死的应用 方法/步骤   1 首先用netstat 找到端口对应的pid号,找到之后 ...

  8. OC - runtime - 1

  9. 有关gitlab的神秘操作.....version&&domain设置...

    在使用gitlab的时候,如果服务器IP变动,之前的domain写入了配置文件了,如下路径: [root@gitlab-server ~]# vim /var/opt/gitlab/gitlab-ra ...

  10. 无法启动MYSQL服务”1067 进程意外终止”解决的方法——汇总及终极方法

    自己一開始依照百度经验里的方法--<MySQL下载安装.配置与使用(win7x64)>去安装和配置,可是到后面步骤总是出现1067代号的错误. 慢慢折腾去解决. 这里汇总各种导致mysql ...