今天上班看了一下boss招聘,发现要做物联网工程师,差不多都要求会mqtt和websocket。
一开始了解websocket是因为mqtt吧,我的后台从发布者那边获得到消息,然后我就很正常想要把数据传到前端,让前端去渲染(妈的,这边前端还是我)。但是我发现这是客户端主动向服务端发请求,这该咋发啊,毕竟我是写好controller接口,让前端调用,这肯定不是主动的。百度了才知道,http的缺点是只能让服务端主动联系客户端,这相当于什么,你不能主动联系渣男啊!最后就发现websocket!客户端可以主动找服务端,服务端也能主动找客户端,就……就很公平。
那就简单的思路,就是后台通过mqtt订阅某个设备,要是设备有数据就推给我的后台,然后通过websocket主动传给前端。
先写前端
后端代码
public void sendMessage(String message){
for (WebSocket webSocket:writeArraySet){
log.info("[websocket消息]广播消息,message={}",message);
try {
webSocket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这边用的try/catch,发送信息报错没那么重要,就直接私下扔掉好了。这边学到了,我之前都忘记了。
这样相当于写好了吧,就我就可以在mqtt那个回调消息的方法里面注入这个websocket。这边了解到这个websocket介于controller和service。别说我,我看b站的。
这边写了一个websocket,正常你只要在这边@Autowired一下注入websocket进去就好了,但是mqtt奇怪一点的,这边写就会报空指针异常,看了博客之后,学到了一招。
用这种方法注入就可以了,换成class样子注入。
现在就是可以实现了后端主动给前端发信息。
那个是mqttfx的软件,充当发布者,前端就收到了相对应的话题和消息,但是我想做个弹框,bootstrap的包一直导不对,一直红红的,什么时候我的基金也能红红红。
明天要去解决一下。