当前位置: 首页 > news >正文

springboot后端用WebSocket每秒向前端传递数据,python接收数据

1 springboot

1.1 加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

1.2 WebSocketConfig 后端设置前端请求的网址,注册请求的信息

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new WebSocketHandler(), "/websocket").setAllowedOrigins("*");}
}

1.3 WebSocketHandler 数据处理与推送

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.Executors;@Component
public class WebSocketHandler extends TextWebSocketHandler {private List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {sessions.add(session);System.out.println("WebSocket session opened: " + session.getId());// + 在这里 加入 每秒 推送的消息ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();executorService.scheduleAtFixedRate(() -> {try {pushDateTimeToClients(); // 每秒调用这个方法处理数据} catch (IOException e) {e.printStackTrace();}}, 0, 1, TimeUnit.SECONDS);}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("Received message from WebSocket client: " + message.getPayload());}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {sessions.remove(session);System.out.println("WebSocket session closed: " + session.getId());}public void pushDateTimeToClients() throws IOException {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateTimeString = dateFormat.format(new Date());List<String> dataList = new ArrayList<>();dataList.add(dateTimeString);ObjectMapper objectMapper = new ObjectMapper();String payload = objectMapper.writeValueAsString(dataList);TextMessage message = new TextMessage(payload);sessions.forEach(webSocketSession -> {try {webSocketSession.sendMessage(message);} catch (IOException e) {e.printStackTrace();}});}
}
/*** afterConnectionEstablished:* 当WebSocket客户端连接到服务端时会触发这个方法,我们将客户端的WebSocketSession对象添加到sessions列表中。* handleTextMessage: 当WebSocket客户端发送消息给服务端时会触发这个方法,在这个示例中,我们暂时不需要处理这个消息。* afterConnectionClosed:* 当WebSocket客户端关闭连接时会触发这个方法,我们需要将客户端的WebSocketSession对象从sessions列表中移除。* pushDateTimeToClients: 这个方法用于向所有连接到WebSocket服务端的客户端推送当前的日期时间信息。*//*** @Component: 该注解用于将WebSocketHandler类声明为Bean,使其能够被Spring容器管理,需要进行依赖注入时直接注入该类即可。*             TextWebSocketHandler:*             这是Spring框架提供的一个实现了WebSocketHandler接口的抽象类,用于处理文本类型的WebSocket消息。在实现WebSocketHandler接口时,一般继承该类并重写其中的方法。*             WebSocketSession:*             该类表示WebSocket连接的会话信息,包括连接ID、协议版本、URI等信息,可以通过该类实现向客户端发送消息等功能,也可以获取客户端发送的消息等操作。*             CopyOnWriteArrayList:*             该类是Java并发包中提供的线程安全集合类之一,其内部实现使用了可重入锁。该类提供的线程安全操作包括添加、删除、修改等,以及遍历集合元素等操作,适用于读多写少的场景。*             ObjectMapper:*             Jackson库中提供的一个用于将对象序列化为JSON格式的类。在这里用于将List对象序列化为JSON字符串。*             List: Java集合框架中提供的一个接口,用于表示有序、可重复的元素序列。在这里用于保存WebSocket连接会话信息。*             TextMessage: 表示文本类型的WebSocket消息,包括消息内容和消息头部信息等。*/

2 python

2.1 pip

pip install websocketpip install websocket-client

2.2 代码

import websocket
import threading
import json
import timedef on_message(ws, message):data_list = json.loads(message)print('Received DateTime: ', data_list[0])def on_error(ws, error):print(error)def on_close(ws):print('WebSocket closed')def on_open(ws):def run(*args):while True:time.sleep(10)ws.send('ping')ws.close()print('Thread terminating...')threading.Thread(target=run).start()if __name__ == '__main__':websocket.enableTrace(True)ws = websocket.WebSocketApp('ws://localhost:8080/websocket',on_message=on_message,on_error=on_error,on_close=on_close)ws.on_open = on_openws.run_forever()'''
上述代码中确实没有打印 ++Rcv raw 和 ++Rcv decoded 的语句。这是因为在代码中使用了 websocket.enableTrace(True),启用了 WebSocket 的跟踪模式,会在控制台打印出 WebSocket 的详细信息,包括收发的字节流等信息。因此打印 ++Rcv raw 和 ++Rcv decoded 的语句是由 WebSocket 库自动生成的,不是代码中明确调用的。如果您想禁用这些跟踪信息,只需要将 websocket.enableTrace(True) 改为 websocket.enableTrace(False) 即可。
'''

http://www.lryc.cn/news/109381.html

相关文章:

  • 记录uniapp 滚动后溢出显示空白的办法
  • 设计原则学习之里氏替换原则
  • 排序进行曲-v4.0
  • Flink 系列四 Flink 运行时架构
  • 14-3_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP 单播和广播
  • 【知识图谱】图数据库Neo4jDesktop的安装图文详解(小白适用)
  • kafka中幂等性producer和事务性producer
  • 静态路由 (华为设备)
  • Django学习笔记-默认的用户认证系统(auth)
  • [SQL挖掘机] - 存储过程
  • MySQL8.0.32详细安装教程(奶妈级手把手教你安装)
  • glut太阳系源码修改和对cpu占用观察
  • 掌握NLTK:Python自然语言处理库中级教程
  • Go语言的崛起:探究越来越多公司选择Go语言的原因和优势
  • MongoDB 6.0.8 安装配置
  • 无涯教程-Lua - nested语句函数
  • 如何使用vue ui创建一个项目?
  • STM32——LED内容补充(寄存器点灯及反转的原理)
  • 使用Spring Boot和EasyExcel的导入导出
  • 【H5移动端】常用的移动端方案合集-键盘呼起、全面屏适配、图片大小显示、300ms点击延迟、首屏优化(不定期补充~)
  • 迭代器模式——遍历聚合对象中的元素
  • 亿赛通电子文档安全管理系统远程命令执行
  • 多雷达探测论文阅读笔记:雷达学报 2023, 多雷达协同探测技术研究进展:认知跟踪与资源调度算法
  • 【Redis】——AOF持久化
  • Keil MDK环境下FreeModebus移植踩坑记录
  • 计算机视觉的延伸整理
  • 通过Idea部署Tomcat服务器(详细图文教学)
  • Window版本ES(ElasticSearch)的安装,使用,启动
  • 网络面试题-UDPTCP
  • 在CSDN学Golang场景化解决方案(即时通讯goim)