这篇文章给大家分享的是有关SpringBoot整合websocket的基础知识点的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。项目最终的文件结构1 添加Maven依赖 <dependency>
这篇文章给大家分享的是有关SpringBoot整合websocket的基础知识点的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
项目最终的文件结构
1 添加Maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-WEBSocket</artifactId></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version></dependency>
2 编写配置类 WebSocketConfig
package cn.huawei.socket_test_1.config; import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Componentpublic class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); }}
3 编写核心业务类 WebSocket
package cn.huawei.socket_test_1.websock;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component; import javax.websocket.*;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;import java.util.concurrent.ConcurrentHashMap; @Slf4j@Component@ServerEndpoint("/websocket/{name}")public class WebSocket { private Session session; private String name; private static ConcurrentHashMap<String,WebSocket> webSocketSet = new ConcurrentHashMap<>(); @OnOpen public void OnOpen(Session session, @PathParam(value = "name") String name){ log.info("----------------------------------"); this.session = session; this.name = name; // name是用来表示唯一客户端,如果需要指定发送,需要指定发送通过name来区分 webSocketSet.put(name,this); log.info("[WebSocket] 连接成功,当前连接人数为:={}",webSocketSet.size()); log.info("----------------------------------"); log.info(""); GroupSending(name+" 来了"); } @OnClose public void OnClose(){ webSocketSet.remove(this.name); log.info("[WebSocket] 退出成功,当前连接人数为:={}",webSocketSet.size()); GroupSending(name+" 走了"); } @OnMessage public void OnMessage(String message_str){ log.info("[WebSocket] 收到消息:{}",message_str); //判断是否需要指定发送,具体规则自定义 //message_str的格式 TOUSER:user2;message:aaaaaaaaaaaaaaaaaa; if(message_str.indexOf("TOUSER") == 0){ //取出 name和message的值 String[] split = message_str.split(";"); String[] split1 = split[0].split(":"); String[] split2 = split[1].split(":"); String name = split1[1]; String message = split2[1]; //指定发送 AppointSending(name,message); }else{ //群发 GroupSending(message_str); } } @OnError public void onError(Session session, Throwable error){ log.info("发生错误"); error.printStackTrace(); } public void GroupSending(String message){ for (String name : webSocketSet.keySet()){ try { webSocketSet.get(name).session.getBasicRemote().sendText(message); }catch (Exception e){ e.printStackTrace(); } } } public void AppointSending(String name,String message){ try { webSocketSet.get(name).session.getBasicRemote().sendText(message); }catch (Exception e){ e.printStackTrace(); } }}
4 因前端不熟悉,所以使用 Http://coolaf.com/tool/chattest 在线测试
因代码中 @ServerEndpoint("/websocket/{name}") 是这样定义的,所以 通过下面的方式连接上去,测试群发和指定发送
因java代码中这样定义的消息,可以指定发送某个人,测试
感谢各位的阅读!关于“springboot整合websocket的基础知识点”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
--结束END--
本文标题: springboot整合websocket的基础知识点
本文链接: https://lsjlt.com/news/269086.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0