一个比较抽象的问题,springboot + Netty 的后台管理系统

要做的是一个后台管理系统,有两方面功能,一方面的功能是一般的网页后台,这一部分我用了 springboot + Mybatis 做了一个 Restful 后台。另一方面的功能是监听设备报文,这一部分我用了 Netty 对设备进行监听报文和报文下发。

目前这两方面的功能都是各干各的,互相间一般不进行通讯,现在遇到一个问题:有一个需求,就是前台能够直接读取并显示设备的数据(之前都是数据存在数据库,然后从数据库取数据),在后台下发以及等待数据返回的时候不影响其他页面的浏览(相当于一个异步请求),这一串需求我实现不了。

因为网页请求的处理都在service和controller,返回的统一的Vo,现在这个需求我倒是借着 redis 做到了在 service 那里跳到 Netty 去下发读取数据的请求报文,但回文在 Netty 解析完了以后,如何再回到 service 层或者 controller 层再返回给前台,这个我不会搞

应该如何实现这个需求呀?有没有什么思路呢?
谢谢大佬们

哦对了,有一补充:这个项目我是打包成一个 war 包,然后分了两个端口监听,一个端口是监听网页请求,一个端口是netty专用监听设备

我感觉有点没读懂,你的WEB应用想读取设备信息的话。你可以把netty收到的消息,在redis中缓存。Conttroller直接从Redis读取就行了呀。

怎么读取呀?是弄一个while循环嘛?会不会阻塞呀?

你可以用websocket呀,WEB客户端和服务器保持一条长连接,Netty那边有设备信息更新什么的,你就往websocket推送。前端就可以及时更新了,整个过程,不要ajax交互。

websocket我了解的不多,有个问题,就是用websocket的时候,前端访问后台我用的是一个端口监听,但是 netty 接收报文以及报文处理我用了另一个端口监听,那同一个 websocket 对象是不是可以做到在一个端口监听前端请求,然后又在另一个端口参与信息推送到对应前端呢?

websocket不需要额外的端口,就是你HTTP服务的端口就行。它先要通过http握手完成升级协议,然后就在HTTP端口上建立了一个长连接。客户端可以主动给服务器推送消息,服务器也可以主动给客户端推送消息。非常实用即时通信的场景。

关于websocket你可以看看这个

好像有思路了,谢谢大佬