当前位置:网站首页 > Java教程 > 正文

websocket java教程



  • 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代码如下:

 
  1. @ServerEndpoint
    通过这个 spring boot 就可以知道你暴露出去的 ws 应用的路径,有点类似我们经常用的@RequestMapping。比如你的启动端口是 8080,而这个注解的值是 ws,那我们就可以通过 ws://127.0.0.1:8080/ws 来连接你的应用
  2. @OnOpen
    当 websocket 建立连接成功后会触发这个注解修饰的方法,注意它有一个 Session 参数
  3. @OnClose
    当 websocket 建立的连接断开后会触发这个注解修饰的方法,注意它有一个 Session 参数
  4. @OnMessage
    当客户端发送消息到服务端时,会触发这个注解修改的方法,它有一个 String 入参表明客户端传入的值
  5. @OnError
    当 websocket 建立连接时出现异常会触发这个注解修饰的方法,注意它有一个 Session 参数
  6. 服务器主动发送消息
    当服务器端要主动给客户端发送, 需要获取掉相应客户端与服务器端的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可以访问以下这些站点

sit link t-io site https://www.t-io.org t-io on gitee https://gitee.com/tywo45/t-io t-io on github https://github.com/tywo45/t-io

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

  • 上一篇: java初始教程
  • 下一篇: java入门教程1
  • 版权声明


    相关文章:

  • java初始教程2024-11-19 12:58:06
  • 上海交大java教程2024-11-19 12:58:06
  • linux安装java教程2024-11-19 12:58:06
  • java方法嵌套教程2024-11-19 12:58:06
  • java输出helloworld教程2024-11-19 12:58:06
  • java入门教程12024-11-19 12:58:06
  • java全套教程45集免费2024-11-19 12:58:06
  • JAVA项目上线教程2024-11-19 12:58:06
  • java教程479集2024-11-19 12:58:06
  • java教程官网2024-11-19 12:58:06