需求:通过采集设备实时上传道路采集车辆行驶轨迹,并通过算法实时计算车辆相关特性(停车、超速、逆行、随意变道等),检测该事件需要实时呈现到页面上显示,由于道路太多,每条道路计算车辆事件都需要推送,这样页面处理压力非常大,可能出现卡顿,甚至可能卡死。

分析需求:

1、首先考虑后端实现技术,实时推送,首页websocket通信,通过前端与ws建立连接后,产生事件就实时推送

2、如何来保证用户查看每条道路时,只推送当前道路相关车辆事件,这里我们可以通过一个标记,比如我们在建立ws连接时,将道路id标识传递到后端,后端进行处理,然后只返回当前道路相关数据

3、如果访问页面用户比较多,如何实现并发,这里我们可以使用Nettty实现,通过不同用户访问建立连接通道

4、以上想法是有了,那如何实现具体需求,首先需要考虑ws建立连接时,Netty自定义处理器进行接收参数,并与当前注册选择的通道进行绑定,ws建立连接默认是不能写到参数,如果有参数就没法建立连接,所有需要在建立连接时需要先将URL路径后的参数去掉,重新添加到request请求中。

5、参数与通道绑定完成,那如何将消息推送到知道通道呢,这时就需要在检测到车辆事件时,需要将道路id携带到发送数据中心,在websocket处理服控制器中接收到数据,然后取出道路Id, 与绑定的参数进行比较,相同,则取出注册的通道进行数据推送,不同则继续下一个,这样就保证了每个用户查看道路,只推送当前道路数据。

具体实现过程参考: https://gitee.com/starsky20/starsky-websocket.git

该项目可以直接运行,运行后访问页面测试 http://localhost:9998/web.html

java netty 实现消息发送 netty推送消息 netty主动推送消息_推送

java netty 实现消息发送 netty推送消息 netty主动推送消息_websocket_02