websocket 入门
先用http 进行握手请求,然后用socket 建立连接,之后就不需要用http 的参与
websocket 的优点
websocket 建立连接
websocket 生命周期
websocket 关闭连接,两种方式,一般应该基于服务器关闭
TCP close 高延迟,数据一致性
# Web 实时通信方案 All In One
HTTP 轮询, 单向通信,开销大
HTTP 长轮询, 单向通信,开销较小
WebSocket,双向通信,开销最小
Server Push,单向通信,开销较小
WebRTC 实时音频,视频,H5 直播
https://github.com/MyCATApache/Mycat-Server
首先,使用 HTTP 协议,建立连接
后面,使用 WS 协议,进行通信
WebSocket建立连接
客户端发起握手请求
服务端响应请求
连接建立
WebSocket:H5协议规范、握手机制、解决客户端与服务端实时通信而产生的技术
本质上是基于TCP的协议
服务端与客户端通过此TCP连接进行实时通信,当WebSocket客户端与服务器端进行通讯以后,此时就不再需要之前进行握手请求的HTTP协议的参与了
WebSocket如何关闭链接:
1、服务器关闭底层TCP链接
2、客户端发起TCP Close
底层的TCP ,正常情况下应该首先由服务器关闭 ,在异常情况下客户端可以发起TCP Close。
流程:当服务器被指示关闭WebSocket链接时,服务端会发起一个TCP Close操作, 客户端应该等待服务器的TCP Close
WebSocket生命周期:
1、打开事件:端点上建立新链接时,该事件是先于其他任何事件发生之前。该事件发生会产生三部分信息。
1.1、创建WebSocket Session对象:用于表示已经建立好的链接
1.2、配置对象:包含配置端点的信息。
1.3、一组路径参数,用于打开节点握手时,WebSocket端入栈匹配的URI
2、消息事件:主要是接收WebSocket对话中,另一端发送的消息。链接上的消息将会有三种形式抵达客户端。
2.1、文本消息 用String处理
2.2、二进制消息 用byteBuffer或者byte[]处理
2.3、pong消息 用Java WebSocket API中的pong.message接口的实例来处理
3、错误事件:WebSocket链接或者端点发生错误时产生。可以处理入栈消息时发生的各种异常。入栈消息可能产生的三种异常。
3.1、WebSocket建立链接时发生错误:SessionException类型
3.2、WebSocket试图将入栈消息解码成开发人员使用的对象时 EncodeException类型
3.3、WebSocket端点的其他方法运行时产生的错误,WebSocket实现将记录端点操作过程中产生的任何异常
4、关闭事件:WebSocket链接端点关闭,做一些清理工作,可以由参与连接的任意一个端点发出。
WebSocket建立连接过程:
1、客户端发起握手请求。
2、服务端响应请求。
3、建立连接。
详细流程:
建立一个WebSocket连接,客户端或浏览器首先向服务器发送一个特殊的Http请求(携带一些附加头信息)Upgrade:websocket,服务端解析附加头信息,产生应答消息,然后响应给客户端,之后客户端就与服务端建立响应的链接。
WebSocket的优点:
节省通信开销,之前WebServer实现通信,都使用轮询(每隔特定时间间隔浏览器自动发送Http请求,去获取服务端的响应)该情况下,需要不停的向服务器发送请求,而HttpRequest的handler很长,请求包含真正的数据可能很小,会占用很多额外的带宽和服务器资源。
服务器主动传送数据给客户端,在给定时间,服务器和客户端在任意时刻相互推送信息,浏览器(客户端)和服务器只需要做一个握手的动作。建立连接后,服务器可主动传数据给客户端,客户端也可以随意向服务端传数据。交换数据时所携带的头信息很小。
实时通信:WebSocket不仅限于Ajax方式通信。ajax方式需要浏览器发起请求。而WebSocket技术 服务端和客户端可以彼此相互推送信息,从而实现实时通信。
什么是WebSocket:是一种H5协议规范,通过握手机制客户端与服务器之间就能够建立一个类似Tcp的连接,从而方便客户端与服务器之间的通信。
它是一种解决客户端与服务端实时通信而产生的技术:WebSocket本质是一种基于TCP协议,先通过Http/Https发一个特殊的Http请求进行握手,握手后会创建一个用于交换数据的TCP链接,之后客户端和服务端使用该TCP链接进行实时通信。当WebSocket的客户端和服务端握手后 建立通信后,就不再需要之前的http请求参与。
webSocket生命周期
WebSocket关闭连接
服务器关闭底层TCP连接
客户端发起TCP Close
WebSocket生命周期
打开事件
消息事件
错误事件
关闭事件
WebSocket建立连接
客户端发起握手请求
服务器响应请求
连接建立
WebSocket的优点:
节省通信开销
服务器主动传送数据给客户端
实时通信
WebSocket 关闭连接
WebSocket 的生命周期
WebSocket建立连接
WebSocket的优点
什么是 WebSocket
WebSocket如何关闭链接:
1、服务端关闭底层TCP链接
2、客户端发起TCP Close
底层的TCP 正常情况下应该首先由服务器关闭 在异常情况下客户端可以发起TCP Close。
流程:当服务器被指示关闭WebSocket链接时,服务端会发起一个TCP Close操作 客户端等待服务器的TCP Close
WebSocket生命周期:
1、打开事件:端点上建立新链接时,该事件是先于其他任何事件发生之前。该事件发生会产生三部分信息。
1.1、创建WebSocket Session对象:用于表示已经建立好的链接
1.2、配置对象:包含配置端点的信息。
1.3、一组路径参数,打开节点握手时,socket端入栈匹配的URI
2、消息事件:主要是接收WebSocket对话中,另一端发送的消息。链接上的消息将会有三种形式抵达客户端。
2.1、文本消息 用String处理
2.2、二进制消息 用byteBuffer或者byte[]处理
2.3、pong消息 用java中pong.message接口的实例来处理
3、错误事件:WebSocket链接或者端点发生错误时产生。可以处理入栈消息时发生的各种异常。入栈消息可能产生的三种异常。
3.1、WebSocket建立链接时发生错误:SessionException
3.2、WebSocket试图将入栈消息解码成开发人员使用的对象时 EncodeException
3.3、WebSocket端点的其他方法运行时产生的错误
4、关闭时间:WebSocket链接端点关闭,做一些清理工作,可以由参与的任意一个端点发出。
WebSocket建立连接过程:
1、客户端发起握手请求。
2、服务端响应请求。
3、建立链接。
详细流程:
浏览器首先向服务器发送一个特殊的Http请求(携带一些附加头信息)Upgrade:websocket,服务端解析附加头信息,产生应答消息,然后响应给客户端。之后客户端就与服务端建立响应的链接。
服务器可主动传送数据给客户端:
在给定时间,服务器和客户端在任意时刻相互推送信息,浏览器(客户端)和服务器只需要做一个握手的动作。建立连接后,服务器可主动传数据给客户端,客户端也可以随意向服务端传数据。交换数据时所携带的头信息很小。
实时通信:
WebSocket不仅限于Ajax方式通信。ajax方式需要浏览器发起请求。而WebSocket技术 服务端和客户端可以彼此相互推送信息,从而实现实时通信。
WebSocket优点:
节省通信开销:之前WebServer实现通信,都使用轮询(每隔特定时间间隔浏览器自动发送Http请求,去获取服务端的响应)该情况下,需要不停的向服务器发送请求,而HttpRequest的handler很长,请求包含真正的数据可能很小,会占用很多额外的带宽和服务器资源。
什么是WebSocket:是一种H5协议规范
解决客户端与服务端实时通信而产生的技术:WebSocket本质是一种基于TCP协议,先通过Http/Https发一个特殊的Http请求进行握手,握手后会创建一个用于交换数据的TCP链接,之后客户端和服务端使用该TCP链接进行实时通信。当WebSocket的客户端和服务端握手后 建立通信后,就不再需要之前的http请求参与。
h5 握手协议 实时通信
WebSocket生命周期
WebSocket关闭连接
服务器关闭底层TCP连接
客户端发起TCP Close