基于Java-EE和websocket的无人机网页监控系统(网页地面站-源码)

前段时间接了一个项目是关于无人机飞行监控系统的,众所周知,目前无人机地面站已经存在两个强大好用的开源软件——Mission planner和QGroundControl,前者是基于C#编写,只能运行在WIN系统,后者基于QT开发,可以跨平台运行。市场存在的地面站都是PC端软件,在跨平台安装使用方面存在短板,为了迎合项目的需求和软件系统的可拓展性,我和小组成员开发了网页版的无人机监控系统,也可以把它称作网页地面站,但功能略微简陋。

平台基于无人机飞行控制系统的GPS设备、数传设备等基础上,通过公共移动网络接收被监控设备传输的数据,在网页平台上显示被监控飞行器的位置和相关参数并绘制出相应的轨迹,目前可同时监控上百架设备。通过平台的各项飞行参数,决策者能够随时掌握飞行器的飞行动态,并对当下状态做出及时响应。本系统是嵌入式平台和计算机软件系统共同结合的系统,采用先进的网络通信协议和web设计方法,通过两者的协调运行可以达到理想的监控效果,主要功能包括数据采集、数据处理、轨迹展示、地图坐标抓取、系统管理等。

前端可实时显示被监控设备的各项指定参数,程序调用了高德地图API的多项功能,用户完全可以像用普通高德地图一样使用该平台。

该平台目前只是处于对无人机实时飞行状态的监控阶段。如图所示,

Index.png

首先介绍一下运行平台:

1、eclipse Java EE、JDK1.8

2、MySQL数据库

3、编辑语言:JAVA、JavaScript、HTML5、CSS、SQL

4、运行协议:websocket、TCP/IP

5、项目工程文件:

总项目.png

  • Java Resources:Java资源类文件中包含了两个包,一个是数据库相关的
    data类包,一个是websocket服务器Thread类包。

  • WebContent:存放关于网页设计的全部代码内容和配置文件。

下面分模块介绍一下:

前端系统

前端主要应用了高德地图JS API组件。

基于高德开发平台

在高德发开着平台申请账号并申请对应的功能秘钥,其中平台内包括了大量的应用实例和详细地说明文档,前端设计思路都是基于其内部的功能接口实现的。

基于JAVA Websocket

ws的出现打破了HTTP协议的壁垒,并且丰富了网络服务器的交互功能。虽然HTTP基于TCP/IP协议实现,但是并没有像TCP协议一样可以全双工实时通信,只能是被动或单双工交互。应用ws协议可以完全像TCP一样进行实时双向通信,即服务器在接收客户端的数据同时,也可以向客户端主动发送信息。因为该系统需要与嵌入式系统联动,在保证双向实时通信的条件下,ws协议是最好的选择。

后端系统

后端系统主要是为数据的收发和存储服务,即数据库的操作和字节流的通信。其中也包括ws协议的节点功能。

基于JAVA Socket

从这一部分开始,主要用于嵌入式系统的通信。服务器程序应用了JAVA Socket字节流通信的基本的API,通过TCP协议与嵌入式系统交互。

MySQL数据库

根据实际情况,我将TCP服务器和网页服务器部署在了两台不同的主机上,并分别设计了两个相同的数据库,应用MySQL自有的主从复制功能,实现两个数据库的同步。

系统的主要构件如图所示:

系统构件.png

服务器如果细分的话按照上文可以分为网页服务器和TCP服务器两部分。总体来说,系统主要由四部分组成,硬件数传模块,网页端,服务器和数据库组成。

将项目部署到服务器上,在浏览器输入正确网址“http://localhost:8080/WebSocketDemo/”,即可进入系统。

源码地址:https://github.com/whonor/UAV-WEB-Monitor-Station。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实现 Spring Boot、RabbitMQ 和 WebSocket 结合的方式主要有以下几个步骤: 1. 创建 Spring Boot 项目,添加 RabbitMQ 和 WebSocket 的相关依赖。 2. 创建 RabbitMQ 队列和交换机,用于发送消息。 3. 创建 WebSocket 配置类,配置 WebSocket 的相关参数。 4. 创建 WebSocket 处理器类,处理 WebSocket 的连接、消息发送等操作。 5. 创建 RabbitMQ 消息监听器类,监听 RabbitMQ 队列中的消息,将消息发送给 WebSocket 处理器。 下面是具体的实现步骤: 1. 创建 Spring Boot 项目,添加 RabbitMQ 和 WebSocket 的相关依赖。 在 pom.xml 中添加以下依赖: ```xml <dependencies> <!-- RabbitMQ 相关依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!-- WebSocket 相关依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> </dependencies> ``` 2. 创建 RabbitMQ 队列和交换机,用于发送消息。 在 RabbitMQ 中创建一个交换机和一个队列,然后将队列绑定到交换机上。这里我们使用 RabbitMQ 的默认交换机和队列。 ```java @Configuration public class RabbitMQConfig { @Bean public Queue queue() { return new Queue("websocket"); } @Bean public DirectExchange exchange() { return new DirectExchange(""); } @Bean public Binding binding(Queue queue, DirectExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("websocket"); } } ``` 3. 创建 WebSocket 配置类,配置 WebSocket 的相关参数。 ```java @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.enableSimpleBroker("/topic"); registry.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS(); } } ``` 4. 创建 WebSocket 处理器类,处理 WebSocket 的连接、消息发送等操作。 ```java @Component public class WebSocketHandler implements WebSocketHandler { private static final Logger logger = LoggerFactory.getLogger(WebSocketHandler.class); private SimpMessagingTemplate messagingTemplate; @Autowired public WebSocketHandler(SimpMessagingTemplate messagingTemplate) { this.messagingTemplate = messagingTemplate; } @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { logger.info("WebSocket connected: {}", session.getId()); } @Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { logger.info("WebSocket received message: {}", message.getPayload()); } @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { logger.error("WebSocket transport error: {}", exception.getMessage()); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { logger.info("WebSocket disconnected: {}", session.getId()); } @Override public boolean supportsPartialMessages() { return false; } public void sendMessage(String message) { messagingTemplate.convertAndSend("/topic/messages", message); } } ``` 5. 创建 RabbitMQ 消息监听器类,监听 RabbitMQ 队列中的消息,将消息发送给 WebSocket 处理器。 ```java @Component public class RabbitMQListener { private static final Logger logger = LoggerFactory.getLogger(RabbitMQListener.class); private WebSocketHandler webSocketHandler; @Autowired public RabbitMQListener(WebSocketHandler webSocketHandler) { this.webSocketHandler = webSocketHandler; } @RabbitListener(queues = "websocket") public void handleMessage(String message) { logger.info("RabbitMQ received message: {}", message); webSocketHandler.sendMessage(message); } } ``` 至此,Spring Boot、RabbitMQ 和 WebSocket 结合的实现就完成了。我们可以通过 RabbitMQ 发送消息到队列,然后监听器会将消息发送给 WebSocket 处理器,处理器再将消息发送给 WebSocket 客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值