Python 官方文档:入门教程 => 点击学习
项目最终的文件结构 1 添加Maven依赖 <dependency> <groupId>org.springframework.boot
项目最终的文件结构
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>
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;
@Component
public 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最基础入门使用教程详解的文章就介绍到这了,更多相关springboot整合websocket入门内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: springboot整合websocket最基础入门使用教程详解
本文链接: https://www.lsjlt.com/news/122317.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0