项目最终的文件 结构
1 添加maven依赖
1 2 3 4 5 6 7 8 9 |
<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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package cn.huawei.socket_test_1.config;
import org.springframework.context.annotation.bean; import org.springframework.stereotype测试数据ponent; import org.springframework.web.socket.server.standard.serverendpointexporter;
@component public class websocketconfig {
/** * serverendpointexporter 作用 * * 这个bean会自动注册使用@serverendpoint注解声明的websocket endpoint * * @return */ @bean public serverendpointexporter serverendpointexporter() { return new serverendpointexporter(); } } |
3 编写核心业务类 websocket
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
package cn.huawei.socket_test_1.websock; import lombok.extern.slf4j.slf4j; import org.springframework.stereotype测试数据ponent;
import javax.websocket.*; import javax.websocket.server.pathparam; import javax.websocket.server.serverendpoint; import java.util.concurrent.concurrenthashmap;
/** * @serverendpoint 注解的作用 * * @serverendpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端, * 注解的值将被用于监听用户连接的终端访问url地址,客户端可以通过这个url来连接到websocket服务器端 */
@slf4j @component @serverendpoint ( "/websocket/{name}" ) public class websocket {
/** * 与某个客户端的连接对话,需要通过它来给客户端发送消息 */ private session session;
/** * 标识当前连接客户端的用户名 */ private string name;
/** * 用于存所有的连接服务的客户端,这个对象存储是安全的 * 注意这里的kv,设计的很巧妙,v刚好是本类 websocket (用来存放每个客户端对应的mywebsocket对象) */ private static concurrenthashmap<string,websocket> websocketset = new concurrenthashmap<>();
/** * 连接建立成功调用的方法 * session为与某个客户端的连接会话,需要通过它来给客户端发送数据 */ @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); } }
/** * 发生错误时调用 * @param session * @param error */ @onerror public void onerror(session session, throwable error){ log.info( "发生错误" ); error.printstacktrace(); }
/** * 群发 * @param message */ public void groupsending(string message){ for (string name : websocketset.keyset()){ try { websocketset.get(name).session.getbasicremote().sendtext(message); } catch (exception e){ e.printstacktrace(); } } }
/** * 指定发送 * @param name * @param message */ public void appointsending(string name,string message){ try { websocketset.get(name).session.getbasicremote().sendtext(message); } catch (exception e){ e.printstacktrace(); } } } |
4 因前端不熟悉,所以使用 http://coolaf测试数据/tool/chattest 在线测试
因代码中 @serverendpoint("/websocket/{name}") 是这样定义的,所以 通过下面的方式连接上去,测试群发和指定发送
因java代码中这样定义的消息,可以指定发送某个人,测试
到此这篇关于springboot整合websocket最基础入门使用教程详解的文章就介绍到这了,更多相关springboot整合websocket入门内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.csdn.net/qq_41712271/article/details/115111987
查看更多关于springboot整合websocket最基础入门使用教程详解的详细内容...