小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
前言:(本文用于辅助Flutter WebSocket的理解) 在这个假期,我完成了一个小Demo,Flutter 与 Springboot 进行websocket的通讯,为啥想要去做这个Demo呢,主要是在各大平台以及google搜索后发现,没有一个详细的例子来教大家进行一对一、一对多的通讯,大多数都是教你怎么连接,却没有教你怎么去进行下一步的功能实现,于是我利用了五天的假期,踩了无数的坑,终于是完成了它,所以,点个赞吧,不容易啊,兄弟们😭
github仓库还没有创建(可以看一下文末通知),前端界面也写好了,如果想要移动端的效果的话需要使用Flutter😎
Flutter移动端分析:Flutter WebSocket 即时通讯
先上效果图(我自己搜索这样功能性的问题时,没有效果图基本上都是不想看的):
这个效果图为Flutter:
即时通讯最重要的功能是完成了(发送文字信息)
阅读本文的注意点:
本文参考www.zhihu.com/column/p/32…,在其基础上进行二次开发
1.需要一点WebSocket的原理知识
2.springboot使用WebSocket的方法,本章就是最普通的原生方法
WebSocket的原理知识在Flutter WebSocket这篇文章中已经讲了,这里就不再重复了
正文:
1.Springboot使用WebSocket的方法
juejin.cn/post/684490… 掘金里已经有大神详细的讲解了
这里推荐spring封装或者STOMP两种方式
讲几个注意的点(详细的步骤掘金里的大神都已经写过啦~):
- pom.xml 配置websocket
1 | xml复制代码<dependency> |
如果需要用户存储功能可以使用Spring Security,用户授权非常方便
- STOMP这个协议是非常优秀的,是一种简单的基于文本的消息传递协议
如果想学习的,我推荐这篇大佬的文章:juejin.cn/post/684490…
2.Springboot实现点对点通信
现在步入正文
- 配置pom.xml
在默认的环境下,加上一个websocket即可,这里使用的是JDK8
1 | xml复制代码<properties> |
- 封装前端传入的信息,以及return的值:
因为使用json进行消息的发送,所以需要先创建一个消息对象,包含了消息发送者,消息接受者,消息类型
1 | arduino复制代码//数据类型 |
- WebSocketConfig处理
这里就简单举了个例子,文章中其实没有怎么用到
1 | kotlin复制代码import org.springframework.context.annotation.Bean; |
- 最重要的内容,逻辑处理部分MyWebSocket来啦!
- 设置websocket连接点映射:
1 | ini复制代码@ServerEndpoint(value = "/websocket/{nickname}") |
- 我们需要一个变量来存储每个客户端对应的MyWebSocket对象.
1 | swift复制代码private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>(); |
一个变量用来记录sessionId和该session之间的绑定关系.
1 | arduino复制代码private static Map<String, Session> map = new HashMap<String, Session>(); |
- 成功建立连接时
1 | less复制代码@OnOpen |
- 收到客户端消息后调用
1 | scss复制代码@OnMessage |
- 发生错误时
1 | csharp复制代码public void onError(Session session, Throwable error) { |
- 如果选择群发时(每个在线的客户都可以收到信息)
1 | typescript复制代码private void broadcast(SocketMsg socketMsg, String nickname) { |
- 连接关闭
1 | csharp复制代码@OnClose |
使用源码时注意,本章使用JDK8,websocket的版本可能略有不同,端口为9090,具体的使用方法可以参考Flutter WebSocket的文章最后~
本文转载自: 掘金