Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

JavaCodeMood/spring-boot-websocket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

1 Commit

Repository files navigation

#Netty WebSocket入门demo

什么是WebSocket:

是一种H5协议规范,通过握手机制客户端与服务器之间就能够建立一个类似Tcp的连接,从而方便客户端与服务器之间的通信。 它是一种解决客户端与服务端实时通信而产生的技术:WebSocket本质是一种基于TCP协议,先通过Http/Https发一个特殊的Http请求进行握手,握手后会创建一个用于交换数据的TCP链接,之后客户端和服务端使用该TCP链接进行实时通信。当WebSocket的客户端和服务端握手后 建立通信后,就不再需要之前的http请求参与。

WebSocket的优点:

  1. 节省通信开销,之前WebServer实现通信,都使用轮询(每隔特定时间间隔浏览器自动发送Http请求,去获取服务端的响应)该情况下,需要不停的向服务器发送请求,而HttpRequest的handler很长,请求包含真正的数据可能很小,会占用很多额外的带宽和服务器资源。
  2. 服务器主动传送数据给客户端,在给定时间,服务器和客户端在任意时刻相互推送信息,浏览器(客户端)和服务器只需要做一个握手的动作。建立连接后,服务器可主动传数据给客户端,客户端也可以随意向服务端传数据。交换数据时所携带的头信息很小。
  3. 实时通信:WebSocket不仅限于Ajax方式通信。ajax方式需要浏览器发起请求。而WebSocket技术 服务端和客户端可以彼此相互推送信息,从而实现实时通信。

WebSocket建立连接过程:

1、客户端发起握手请求。
2、服务端响应请求。
3、建立连接。
详细流程:
建立一个WebSocket连接,客户端或浏览器首先向服务器发送一个特殊的Http请求(携带一些附加头信息)Upgrade:websocket,服务端解析附加头信息,产生应答消息,然后响应给客户端,之后客户端就与服务端建立响应的链接。

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、服务器关闭底层TCP链接
2、客户端发起TCP Close
底层的TCP ,正常情况下应该首先由服务器关闭 ,在异常情况下客户端可以发起TCP Close。
流程:当服务器被指示关闭WebSocket链接时,服务端会发起一个TCP Close操作, 客户端应该等待服务器的TCP Close

用法:

  1. 启动SpringBoot服务,访问:http://localhost:8080/websocket
  2. 启动MainApp主程序,然后刷新页面,就可以进行发送数据了

About

WebSocket入门demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /