- 1. 前言
- 2. 第一种使用Java原生代码实现websocket
- 2.1. 首先在项目中引入依赖
- 2.2. 创建WebsocketServer类
- 2.3. 启动SocketServer
- 2.4. 测试web socket server
- 3. 使用Java原生+SpringBoot混合
- 3.1. 引入依赖
- 3.2. 创建ServerEndpoint
- 3.3. 添加Spring配置
- 3.4. 启动应用程序并测试
- 4. 使用SpringBoot实现websocket
- 4.1. 引入依赖
- 4.2. 实现类
- 4.3. Spring 配置
- 4.4. 启动与测试
- 5. 使用TIO+SpringBoot实现websocket
- 5.1. 添加相应依赖
- 5.2. 编写消息处理类
- 5.3. 修改配置文件
- 5.4. 启动tio Websocket Server
- 6. STOMP实现websocket
- 6.1. 添加相应依赖
- 6.2. 实现配置WebSocketMessageBrokerConfigurer接口
- 6.3. 实现消息请求处理的Controller
- 6.4. 启动
- 6.5. 实现消息客户端
- 7. 参考文档
本文主要讲述在Java技术领域实现websocket服务的五种方式.
使用Java原生代码实现websocket服务的方法, 此方法需要引入一个第三方库java-websocket.jar. 截至目前2023/01/01最新版本为1.5.3.
项目源代码位于: https://github.com/TooTallNate/Java-WebSocket
示例代码位于: https://github.com/TooTallNate/Java-WebSocket/tree/master/src/main/example
如果你的项目使用gradle作为管理工具, 可以添加以下gradle依赖
如果你的项目使用maven进行管理, 可以添加以下maven依赖
mven依赖
我们以及创建好了SocketServer, 这个时候我们可以启动它了, 启动代码如下.
写好main方法后, 我们可以启动它, 当控制台输出表示启动成功.
此时web socket server已经监听在了localhost:8887上. 我们可以使用websocket在线调试工具对其进行测试.
打开工具在输入框中输入 ws://localhost:8887点击连接, 既可以看到服务器端的反馈, 同时web socket server的控制台也会输出日志信息.
在此种方式中, SocketServer依然使用原生的java代码编写, 但是SocketServer实例化过程由spring来管理.
此时我们需要引入spring-boot-starter-websocket, 上一节中的依赖包Java-WebSocket已经不需要了. 两种方式采用了不同的机制.
此处我们需要在gradle配置文件的plugins闭包内添加两个plugins, 一个复制控制spring boot的版本, 一个负责管理依赖.
对于maven, 需要如下配置
创建ServerEndpoint代码如下:
- @ServerEndpoint
通过这个 spring boot 就可以知道你暴露出去的 ws 应用的路径,有点类似我们经常用的@RequestMapping。比如你的启动端口是 8080,而这个注解的值是 ws,那我们就可以通过 ws://127.0.0.1:8080/ws 来连接你的应用 - @OnOpen
当 websocket 建立连接成功后会触发这个注解修饰的方法,注意它有一个 Session 参数 - @OnClose
当 websocket 建立的连接断开后会触发这个注解修饰的方法,注意它有一个 Session 参数 - @OnMessage
当客户端发送消息到服务端时,会触发这个注解修改的方法,它有一个 String 入参表明客户端传入的值 - @OnError
当 websocket 建立连接时出现异常会触发这个注解修饰的方法,注意它有一个 Session 参数 - 服务器主动发送消息
当服务器端要主动给客户端发送, 需要获取掉相应客户端与服务器端的session, 通过 session.getBasicRemote().sendText(), 将消息发送到前端.
因此最好在onOpen方法中将session对象保存起来, 这样下次主动连接客户端时能找到相应的session对象.
有了WsServerEndpoint后我们还要配置ServerEndpointExporter, 将Endpoint暴露出去让客户端来建立连接.
而配置ServerEndpointExporter的方式非常简单, 只需要创建一个ServerEndpointExporter bean即可, 它会去获取Spring上下文中所有的Endpoint示例, 完成endpoint的注册过程, 并监听在application.properties 的server.port 属性所指定的端口.
我们只需要向一般的Spring boot应用一样启动它即可.
测试, 我们依然使用websocket在线调试工具来测试, 详情可参考上一节中的介绍
与上一节稍微差异的地方是, 我们可以url中指定endpoint了 ws://127.0.0.1:8080/myWs
HttpAuthHandler.java
WsSessionManager.java
启动代码如下:
执行main方法启动应用程序
测试依然使用websocket在线调试工具
以下是关于t-io的一些信息, 如果需要更详细的了解tio可以访问以下这些站点
gradle:
maven:
application.properties
启动tio Websocket Server 的方式如下, 执行main方法.
gradle:
maven:
WebSocketConfig.java
WSController.java
domain object
Shout.java
index.html
本技术博客原创文章位于鹏叔的IT技术博客空间 - java实现websocket的五种方式, 获取最近更新请访问原文.
更多技术博客请访问: 鹏叔的IT技术博客空间
更新: 2023/04/14
上面所讲的都是关于Java程序作为服务端与前端通信. 在Webservice完整体系中还缺少了一块, 那就是服务端向客户端推送消息, 这时候则需要java作为客户端, 这里我写了一个java作为ws客户端的例子, 希望对您有所帮助使用stomp的java客户端推送数据
websocket - spring boot 集成 websocket 的四种方式
websocket在线调试工具
JAVA实现WebSocket服务器
让网络编程更轻松和有趣 t-io
tio-websocket-spring-boot-starter 的简单使用
STOMP原理与应用开发详解
Spring消息之STOMP
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/18007.html