Springboot基于websocket实现简单在线聊天功能

作者:yytxdy 时间:2023-12-21 08:58:18 

添加maven依赖


<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.2.5.RELEASE</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>springboot-websocket</artifactId>
 <name>springboot-websocket</name>

<dependencies>
   <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>
 </dependencies>

</project>

添加websocket配置


@Configuration
@EnableWebSocket
public class MyWebSocketConfig implements WebSocketConfigurer {
 @Override
 public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
   registry.addHandler(myHandler(), "/myHandler").setAllowedOrigins("*");
 }

@Bean
 public WebSocketHandler myHandler() {
   return new MyTextWebSocketHandler();
 }
}

实现具体的handler


public class MyTextWebSocketHandler extends TextWebSocketHandler {
 private Set<WebSocketSession> sessions = new HashSet<>();

@Override
 protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
   if (session.isOpen()) {
     sessions.add(session);
   }
   sendToAll(message);
 }
 private void sendToAll(TextMessage message) throws IOException {
   for (WebSocketSession session : sessions) {
     session.sendMessage(message);
   }
 }
 @Override
 public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
   sessions.remove(session);
 }
}

即可通过ws://localhost:8080/myHandler访问websocket

添加测试页面:


<html>
<script type="text/javascript">
 if ("WebSocket" in window) {
   var ws = new WebSocket("ws://localhost:8080/myHandler");
   ws.onopen = function () {

};

ws.onmessage = function (evt) {
     document.getElementById('messageDiv').innerHTML += evt.data + "</br>";
   };

ws.onclose = function () {
     console.log("close connect");
   };
 } else {
   alert("您的浏览器不支持 WebSocket!");
 }

function send() {
   ws.send(document.getElementById("input").value + ": " + document.getElementById("message").value);
 }
</script>

</head>
<body>
当前用户: <input id="input"/><br/>
<a href="#" rel="external nofollow" onclick="send();">发送消息</a>: <input id="message"/>
<div id="messageDiv"></div>
</body>
</html>

即可实现简单的通信功能

来源:https://www.cnblogs.com/yytxdy/p/12801015.html

标签:spring,boot,web,socket,在线,聊天
0
投稿

猜你喜欢

  • Android 仿余额宝数字跳动动画效果完整代码

    2021-06-02 16:53:41
  • 浅谈关于Android WebView上传文件的解决方案

    2021-10-29 21:33:51
  • 基于SpringBoot实现用户身份验证工具

    2022-05-08 18:37:29
  • C#中TransactionScope的使用小结

    2022-02-15 01:53:08
  • Cocos2d-x 3.0多线程异步加载资源实例

    2022-02-08 03:26:51
  • c++函数指针使用示例分享

    2022-01-20 17:48:26
  • MyBatis Generator去掉生成的注解

    2022-08-29 22:01:03
  • Java BeanPostProcessor与BeanFactoryPostProcessor基础使用讲解

    2022-10-25 21:52:35
  • Android实现蒙版弹出框效果

    2023-06-14 17:13:43
  • Android重力传感器实现滚动的弹球

    2023-05-04 05:49:28
  • Java EE项目中的异常处理总结(一篇不得不看的文章)

    2023-06-16 23:35:26
  • C#如何从byte[]中直接读取Structure实例详解

    2021-11-07 22:02:00
  • Android ListView 实现上拉加载的示例代码

    2021-09-16 18:04:17
  • C#的WebBrowser操作frame实例解析

    2022-03-02 03:46:43
  • 理解C#中的Lambda表达式

    2022-10-30 07:50:23
  • C#8 的模式匹配实现

    2023-02-11 16:22:16
  • C#识别出图片里的数字和字母

    2023-04-12 08:21:41
  • Java springboot yaml语法注解

    2023-06-17 08:13:35
  • Android中扫描多媒体文件操作详解

    2022-06-02 09:06:53
  • 利用Kotlin开发你的第一个Android应用

    2022-04-23 14:39:53
  • asp之家 软件编程 m.aspxhome.com