SpringBoot使用Websocket(一)
webSocket是HTML5的一种新协议,它实现了服务端与客户端的全双工通信,建立在传输层,tcp协议之上,即浏览器与服务端需要先建立tcp协议,再发送webSocket连接建立请求。webSocket的连接:客户端发送请求信息,服务端接受到请求并返回相应的信息。连接建立。客户端发送http请求时,通过 Upgrade:webSocket Connection:Upgrade 告知服务器需要建立的是webSocket连接,并且还会传递webSocket版本号,协议的字版本号,原始地址,主机地址, webSocket相互通信的Header很小,大概只有2Bytes
本文介绍SpringBoot结合WebSocket实现群发消息, 如想学习如何一对一发送可看我第二篇文章springboot使用websocket(二)
一. 消息群发
1. 导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
2. 新建WebSocket配置类
/** * @author Gjing **/@Configurationpublic class WebsocketConfiguration {@Beanpublic ServerEndpointExporter serverEndpointExporter() {retu new ServerEndpointExporter();}}
3. 新建WebSocket服务端
/** * @author Gjing **/@ServerEndpoint("/test")@Component@Slf4jpublic class MyWebsocketServer {/** * 存放所有在线的客户端 */private static Map<String, Session> clients = new ConcurrentHashMap<>();@OnOpenpublic void onOpen(Session session) {log.info("有新的客户端连接了: {}", session.getId());//将新用户存入在线的组clients.put(session.getId(), session);}/** * 客户端关闭 * @param session session */@OnClosepublic void onClose(Session session) {log.info("有用户断开了, id为:{}", session.getId());//将掉线的用户移除在线的组里clients.remove(session.getId());}/** * 发生错误 * @param throwable e */@OnErrorpublic void onError(Throwable throwable) {throwable.printStackTrace();}/** * 收到客户端发来消息 * @param message 消息对象 */@OnMessagepublic void onMessage(String message) {log.info("服务端收到客户端发来的消息: {}", message);this.sendAll(message);}/** * 群发消息 * @param message 消息内容 */private void sendAll(String message) {for (Map.Entry<String, Session> sessionEntry : clients.entrySet()) {sessionEntry.getValue().getAsyncRemote().sendText(message);}}}
4. 启动后,客户端连接websocket
5. 客户端发送消息得到的响应和服务端的响应
- 客户端
- 服务端
以上为简单的使用案例,更多案例各位可以自行研究,demo源代码地址:!SpringBoot-websocket
作者:阿靖哦
来源链接:https://blog.csdn.net/weixin_43835717/article/details/94066791
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。