广告
返回顶部
首页 > 资讯 > 精选 >怎么在SpringBoot中利用WebSocket实现一个群聊功能
  • 808
分享到

怎么在SpringBoot中利用WebSocket实现一个群聊功能

2023-06-06 13:06:41 808人浏览 安东尼
摘要

本篇文章为大家展示了怎么在SpringBoot中利用websocket实现一个群聊功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。消息群发创建新项目:添加依赖:<dependency>

本篇文章为大家展示了怎么在SpringBoot中利用websocket实现一个群聊功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

消息群发

创建新项目:

添加依赖:

<dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-WEB</artifactId>  </dependency>  <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-webSocket</artifactId>  </dependency>  <dependency>   <groupId>org.webjars</groupId>   <artifactId>sockjs-client</artifactId>   <version>1.1.2</version>  </dependency>  <dependency>   <groupId>org.webjars</groupId>   <artifactId>Jquery</artifactId>   <version>3.3.1</version>  </dependency>  <dependency>   <groupId>org.webjars</groupId>   <artifactId>stomp-websocket</artifactId>   <version>2.3.3</version>  </dependency>  <dependency>   <groupId>org.webjars</groupId>   <artifactId>webjars-locator-core</artifactId></dependency>

创建WebSocket配置类:WebSocketConfig

@Configuration@EnableWebSocketMessageBroker//注解开启webSocket消息代理public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {  @Override public void configureMessageBroker(MessageBrokerReGIStry registry) {  registry.enableSimpleBroker("/topic");  //代理消息的前缀  registry.setApplicationDestinationPrefixes("/app");   //处理消息的方法前缀 } @Override public void registerStompEndpoints(StompEndpointRegistry registry) {  registry.addEndpoint("/chat").withSockJS();   //定义一个/chat前缀的endpioint,用来连接 }}

创建Bean

public class Message { private String name; private String content;//省略getter& setter}

定义controller的方法:

 @MessageMapping("/hello") @SendTo("/topic/greetings") public Message greeting(Message message) throws Exception {  return message; }
<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="/webjars/jquery/jquery.min.js"></script> <script src="/webjars/sockjs-client/sockjs.min.js"></script> <script src="/webjars/stomp-websocket/stomp.min.js"></script> <script>  var stompClient = null;  //点击连接以后的页面改变  function setConnected(connection) {   $("#connect").prop("disable",connection);   $("#disconnect").prop("disable",!connection);   if (connection) {    $("#conversation").show();    $("#chat").show();   } else {    $("#conversation").hide();    $("#chat").hide();   }   $("#greetings").html("");  }  //点击连接按钮建立连接  function connect() {   //如果用户名为空直接跳出   if (!$("#name").val()) {    return;   }   //创建SockJs实例,建立连接   var sockJS = new SockJS("/chat");   //创建stomp实例进行发送连接   stompClient = Stomp.over(sockJS);   stompClient.connect({}, function (frame) {    setConnected(true);    //订阅服务端发来的信息    stompClient.subscribe("/topic/greetings", function (greeting) {     //将消息转化为JSON格式,调用方法展示     showGreeting(JSON.parse(greeting.body));    });   });  }  //断开连接  function disconnect() {   if (stompClient !== null) {    stompClient.disconnect();   }   setConnected(false);  }  //发送信息  function sendName() {   stompClient.send("/app/hello",{},JSON.stringify({'name': $("#name").val() , 'content': $("#content").val()}));  }  //展示聊天房间  function showGreeting(message) {   $("#greetings").append("<div>"+message.name + ":" + message.content + "</div>");  }  $(function () {   $("#connect").click(function () {    connect();   });   $("#disconnect").click(function () {    disconnect();   });   $("#send").click(function () {    sendName();   })  }) </script></head><body><div> <label for="name">用户名</label> <input type="text" id="name" placeholder="请输入用户名"></div><div> <button id="connect" type="button">连接</button> <button id="disconnect" type="button">断开连接</button></div><div id="chat" > <div>  <label for="name"></label>  <input type="text" id="content" placeholder="聊天内容"> </div> <button id="send" type="button">发送</button> <div id="greetings">  <div id="conversation" >群聊进行中</div> </div></div></body></html>

私聊

既然是私聊,就要有对象目标,也是用户,可以用SpringSecurity引入
所以添加额外依赖:

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-security</artifactId></dependency>

配置SpringSecurity

@Configurationpublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean PassWordEncoder passwordEncoder(){  return new BCryptPasswordEncoder(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception {  auth.inMemoryAuthentication()    .withUser("panlijie").roles("admin").password("$2a$10$5Pf0KhCdnrpMxP5aRrHvMOsvV2fvfWJqk0SEDa9vQ8OWwV8emLFhi")    .and()    .withUser("suyanxia").roles("user").password("$2a$10$5Pf0KhCdnrpMxP5aRrHvMOsvV2fvfWJqk0SEDa9vQ8OWwV8emLFhi"); } @Override protected void configure(httpsecurity Http) throws Exception {  http.authorizeRequests()    .anyRequest().authenticated()    .and()    .fORMLogin()    .permitAll(); }}

在原来的WebSocketConfig配置类中修改:也就是多了一个代理消息前缀:"/queue"

@Configuration@EnableWebSocketMessageBroker//注解开启webSocket消息代理public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {  @Override public void configureMessageBroker(MessageBrokerRegistry registry) {  registry.enableSimpleBroker("/topic","/queue");  //代理消息的前缀  registry.setApplicationDestinationPrefixes("/app");   //处理消息的方法前缀 } @Override public void registerStompEndpoints(StompEndpointRegistry registry) {  registry.addEndpoint("/chat").withSockJS();   //定义一个/chat前缀的endpioint,用来连接 }}

创建Bean:

public class Chat { private String to; private String from; private String content;//省略getter& setter}

添加controller方法:

  @MessageMapping("chat") public void chat(Principal principal, Chat chat) {  //获取当前对象设置为信息源  String from = principal.getName();  chat.setFrom(from);  //调用convertAndSendToUser("用户名","路径","内容");  simpMessagingTemplate.convertAndSendToUser(chat.getTo(), "/queue/chat", chat); }

创建页面:

<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="/webjars/jquery/jquery.min.js"></script> <script src="/webjars/sockjs-client/sockjs.min.js"></script> <script src="/webjars/stomp-websocket/stomp.min.js"></script> <script>  var stompClient = null;  function connect() {   var socket = new SockJS("/chat");   stompClient = Stomp.over(socket);   stompClient.connect({}, function (frame) {    stompClient.subscribe('/user/queue/chat', function (chat) {     showGreeting(JSON.parse(chat.body));    });   });  }  function sendMsg() {   stompClient.send("/app/chat",{},JSON.stringify({'content' : $("#content").val(), 'to': $("#to").val()}));  }  function showGreeting(message) {   $("#chatsContent").append("<div>" + message.from + ":" + message.content + "</div>");  }  $(function () {   connect();   $("#send").click(function () {    sendMsg();   });  }); </script></head><body><div id="chat"> <div id="chatsContent"> </div> <div>  请输入聊天内容  <input type="text" id="content" placeholder="聊天内容">  <input type="text" id="to" placeholder="目标用户">  <button type="button" id="send">发送</button> </div></div></body></html>

上述内容就是怎么在SpringBoot中利用WebSocket实现一个群聊功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么在SpringBoot中利用WebSocket实现一个群聊功能

本文链接: https://www.lsjlt.com/news/247216.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在SpringBoot中利用WebSocket实现一个群聊功能
    本篇文章为大家展示了怎么在SpringBoot中利用WebSocket实现一个群聊功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。消息群发创建新项目:添加依赖:<dependency>...
    99+
    2023-06-06
  • 在SpringBoot中利用Websocket实现一个网页聊天功能
    这篇文章将为大家详细讲解有关在SpringBoot中利用Websocket实现一个网页聊天功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。导入websocket的包。通过使用SpringB...
    99+
    2023-05-31
    springboot websocket bs
  • SpringBoot+STOMP协议怎么实现私聊、群聊功能
    这篇文章主要介绍了SpringBoot+STOMP协议怎么实现私聊、群聊功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、为什么需要STOMP  &n...
    99+
    2023-06-15
  • nodejs中怎么利用websocket实现一个实时聊天系统
    nodejs中怎么利用websocket实现一个实时聊天系统,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。client.html:<!D...
    99+
    2022-10-19
  • PHP中怎么利用WebSocket实现一个在线聊天通讯系统
    今天就跟大家聊聊有关PHP中怎么利用WebSocket实现一个在线聊天通讯系统,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。新建WebSocket....
    99+
    2022-10-18
  • 怎么在HTML5中使用WebSocket实现一个聊天室
    本篇文章给大家分享的是有关怎么在HTML5中使用WebSocket实现一个聊天室,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1)注册注册要处理几个事情,分别是注册完成后获取当...
    99+
    2023-06-09
  • 怎么在SpringBoot中利用Shiro实现一个密码登录功能
    怎么在SpringBoot中利用Shiro实现一个密码登录功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。导入依赖(pom.xml) <!--...
    99+
    2023-06-06
  • 怎么在springboot中利用thymeleaf模板实现一个paginate分页功能
    今天就跟大家聊聊有关怎么在springboot中利用thymeleaf模板实现一个paginate分页功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。pom.xml 加入 ...
    99+
    2023-05-31
    springboot thymeleaf paginate
  • 利用SpringBoot怎么实现一个多表联查功能
    这篇文章给大家介绍利用SpringBoot怎么实现一个多表联查功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体方法如下:public interface FieldValueDao extends JpaRepo...
    99+
    2023-05-31
    springboot bo
  • Docker中怎么利用Consul集群实现一个服务发现功能
    本篇文章给大家分享的是有关Docker中怎么利用Consul集群实现一个服务发现功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。服务发现  ...
    99+
    2022-10-18
  • C#中怎么用websocket实现简易聊天功能
    本篇内容主要讲解“C#中怎么用websocket实现简易聊天功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中怎么用websocket实现简易聊天功能”吧!前言使用C#语言进行开发,基于....
    99+
    2023-06-29
  • 怎么在Django中使用channels和websocket实现一个在线聊天室
    本篇文章为大家展示了怎么在Django中使用channels和websocket实现一个在线聊天室,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Channels是Django团队研发的一个给Djan...
    99+
    2023-06-15
  • 怎么在HTML5中利用WebSocket实现点对点聊天
    这期内容当中小编将会给大家带来有关怎么在HTML5中利用WebSocket实现点对点聊天,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先在系统启动的时候调用InitServlet方法public&nbs...
    99+
    2023-06-09
  • 如何在springboot中利用Quartz实现一个定时任务功能
    如何在springboot中利用Quartz实现一个定时任务功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、新建一个springboot工程,并添加依赖<depen...
    99+
    2023-05-31
    springboot art quartz
  • 怎么在Java中利用JDBC实现一个事务功能
    本文章向大家介绍怎么在Java中利用JDBC实现一个事务功能,主要包括怎么在Java中利用JDBC实现一个事务功能的使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java是什么Java是一门面...
    99+
    2023-05-30
  • 怎么在Android中利用IntentUtil实现一个跳转功能
    本文章向大家介绍怎么在Android中利用IntentUtil实现一个跳转功能的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统...
    99+
    2023-05-30
    android intentutil
  • 怎么在Centos中利用文件实现一个swap功能
    怎么在Centos中利用文件实现一个swap功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建swap文件mkdir/var/swap#创建一个文件夹用于存放交换分区文件,...
    99+
    2023-06-10
  • 怎么在html5中利用canvas实现一个弹幕功能
    本篇文章为大家展示了怎么在html5中利用canvas实现一个弹幕功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。(function () {   ...
    99+
    2023-06-09
  • 在Web应用中使用WebSocket实现实时聊天功能
    在现代的Web应用程序中,实时聊天是一项非常常见的功能。使用传统的HTTP协议进行通信是不适合实时性的,因此需要借助WebSocket来实现实时聊天功能。WebSocket是HTML5中的一项新技术,它提供了一种在Web浏览器和服务器之间进...
    99+
    2023-10-21
    websocket Web应用 实时聊天
  • SpringBoot中怎么实现一个slf4j日志功能
    SpringBoot中怎么实现一个slf4j日志功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。其pom.xml里的依赖定义如下:上图看到很多Starter,比如Spri...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作