实时转发数据 java_SpringBoot整合WebSocket实现数据实时发送

本文介绍了WebSocket的用途、优缺点,并通过一个Java SpringBoot项目展示了如何实现WebSocket进行实时数据发送。首先解释了WebSocket的目的和优点,然后通过一个社交聊天应用的例子展示其应用场景。接着详细阐述了在SpringBoot中集成WebSocket的步骤,包括配置、后台和前端代码的编写。最后,给出了一个简单的JavaScript前端实现,用于连接和接收WebSocket服务器的数据。
摘要由CSDN通过智能技术生成

WebSocket简介

目的

HTML5 WebSocket设计出来的目的就是取代轮询和长连接,使客户端浏览器具备像C/S框架下桌面系统的即时通讯能力,实现了浏览器和服务器全双工通信,建立在TCP之上,虽然WebSocket和HTTP一样通过TCP来传输数据,但WebSocket可以主动的向对方发送或接收数据,就像Socket一样;并且WebSocket需要类似TCP的客户端和服务端通过握手连接,连接成功后才能互相通信。

优点

双向通信、事件驱动、异步、使用ws或wss协议的客户端能够真正实现意义上的推送功能。

缺点

少部分浏览器不支持。

示例

社交聊天(微信、QQ)、弹幕、多玩家玩游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等高实时性的场景。

WebSocket请求响应客户端服务器交互图

ad5e340f5ba8?from=timeline&isappinstalled=0

请求响应客户端服务器交互图.png

WebSocket方式减少了很多TCP打开和关闭连接的操作,WebSocket的资源利用率高。

java WebSocket实现

Oracle 发布的 java 的 WebSocket 的规范是 JSR356规范 ,Tomcat从7.0.27开始支持WebSocket,从7.0.47开始支持JSR-356。

websocket简单实现分为以下几个步骤:

添加websocket库

编写后台代码

编写前端代码。

添加websocket整合springboot依赖

org.springframework.boot

spring-boot-starter-websocket

后台代码实现

配置类

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**

* 首先注入一个ServerEndpointExporterBean,该Bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint

* 链接:https://www.imooc.com/article/70702?block_id=tuijian_wz

*/

@Configuration

public class WebSocketConfig {

@Bean

public ServerEndpointExporter serverEndpointExporter() {

return new ServerEndpointExporter();

}

}

websocket接口实现

@ServerEndpoint(value = "/websocket") //接受websocket请求路径

@Component

public class PoundWebSocket {

private Logger logger = LoggerFactory.getLogger(this.getClass());

/**

* 保存所有在线socket连接

*/

private static Map webSocketMap = new LinkedHashMap<>();

/**

* 记录当前在线数目

*/

private static int count = 0;

/**

* 当前连接(每个websocket连入都会创建一个MyWebSocket实例

*/

private Session session;

/**

* 创建监听串口

*/

private static SerialPort serialPort = null;

/**

* 创建监听器

*/

private static SerialPortEventListener serialPortEventListener = null;

/**

* 监听串口

*/

private static String PORT_NAME;

/**

* 监听串口波特率

*/

private static int BAUD_RATE;

/**

* 数据位

*/

private static int DATA_BITS;

/**

* 停止位

*/

private static int STOP_BITS;

/**

* 奇偶位

*/

private static int PARITY;

/**

* 地磅型号

*/

private static String MODEL;

private static IPoundInfoService pou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值