1         <!--websocket 依赖-->
2 <dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-websocket</artifactId>
5 </dependency>

目录

 一、WebSocketConfig配置类

 1 package com.example.demo.taotao.chat.webSocket;
2
3 import org.springframework.context.annotation.Bean;
4 import org.springframework.context.annotation.Configuration;
5 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
6
7 @Configuration
8 public class WebSocketConfig {
9 @Bean
10 public ServerEndpointExporter serverEndpointExporter() {
11 return new ServerEndpointExporter();
12 }
13
14 }

 二、WebSocket 类

 1 package com.example.demo.taotao.chat.webSocket;
2
3 import org.springframework.stereotype.Component;
4
5 import javax.websocket.OnClose;
6 import javax.websocket.OnMessage;
7 import javax.websocket.OnOpen;
8 import javax.websocket.Session;
9 import javax.websocket.server.ServerEndpoint;
10 import java.io.IOException;
11 import java.text.SimpleDateFormat;
12 import java.util.Locale;
13 import java.util.concurrent.CopyOnWriteArraySet;
14
15 @Component
16 @ServerEndpoint("/webSocket")
17 @SuppressWarnings("all")
18 public class WebSocket {
19
20 private Session session;
21
22 private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();
23
24 @OnOpen
25 public void onOpen(Session session) {
26 this.session = session;
27 webSocketSet.add(this);
28 System.out.println("新的连接 总数:" + webSocketSet.size());
29 sendMessage("聊天室新来人了 总数:" + webSocketSet.size());
30 sendMessage("");
31
32 }
33
34
35 @OnClose
36 public void onColse() {
37 webSocketSet.remove(this);
38 System.out.println("断开连接 总数:" + webSocketSet.size());
39
40 }
41
42 /**
43 * 接收客户端发来的消息
44 *
45 * @param message
46 * @param name
47 */
48 @OnMessage
49 public void onMessage(String message) {
50 System.out.println("收到客户端发来的消息:");
51 //接到客户端的消息后将消息推送给所有人
52 SimpleDateFormat sdf1 = new SimpleDateFormat("", Locale.SIMPLIFIED_CHINESE);
53 sdf1.applyPattern("yyyy-MM-dd HH:mm:ss");
54
55 sendMessage(sdf1.format(System.currentTimeMillis()) + "\n");
56 sendMessage(message);
57 sendMessage("");
58 }
59
60 /**
61 * 向客户端发送消息的方法
62 *
63 * @param message
64 */
65 public void sendMessage(String message) {
66 for (WebSocket webSocket : webSocketSet) {
67 System.out.println("广播消息:" + message);
68 try {
69 webSocket.session.getBasicRemote().sendText(message);
70 } catch (IOException e) {
71 e.printStackTrace();
72 }
73
74 }
75 }
76 }

三、前端(HTML)

 1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <title>My WebSocket</title>
5 </head>
6
7 <body>
8 welcome chat<br />
9
10 <input id="text" type="text" /><button onclick="send()">Send</button> <button
11 onclick="closeWebSocket()">Close</button>
12 <div id="message">
13 </div>
14 </body>
15
16 <script type="text/javascript">
17 var websocket = null;
18 var name = "张三";
19
20 //判断当前浏览器是否支持WebSocket
21 if ('WebSocket' in window) {
22 websocket = new WebSocket("ws://127.0.0.1:8080/webSocket");
23 } else {
24 alert('Not support websocket')
25 }
26
27 //连接发生错误的回调方法
28 websocket.onerror = function() {
29 setMessageInnerHTML("error");
30 };
31
32 //连接成功建立的回调方法
33 websocket.onopen = function(event) {
34 setMessageInnerHTML("连接成功");
35 }
36
37 //接收到消息的回调方法
38 websocket.onmessage = function(event) {
39 setMessageInnerHTML(event.data);
40 }
41
42 //连接关闭的回调方法
43 websocket.onclose = function() {
44 setMessageInnerHTML("close");
45 }
46
47 //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
48 window.onbeforeunload = function() {
49 websocket.close();
50 }
51
52 //将消息显示在网页上
53 function setMessageInnerHTML(innerHTML) {
54 document.getElementById('message').innerHTML += innerHTML + '<br/>';
55 }
56
57 //关闭连接
58 function closeWebSocket() {
59 websocket.close();
60 }
61
62 //发送消息
63 function send() {
64 var message = document.getElementById('text').value;
65 websocket.send(message);
66 }
67 </script>
68 </html>

运行

springboot使用Websocket写一个聊天室的更多相关文章

  1. 使用原生node写一个聊天室

    在学习node的时候都会练习做一个聊天室的项目,主要使用socket.io模块和http模块.这里我们使用更加原始的方式去写一个在命令行聊天的聊天室. http模块,socket.io都是高度封装之后 ...

  2. WebSocket实现一个聊天室

    聊天室页面-->index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  3. Golang之写一个聊天室

    . 海量用户在线聊天系统 . 点对点聊天 . 用户登录&注册 一.服务端开发 . 用户管理 用户id:数字 用户密码:字母数字组合 用户昵称:用来显示 用户性别:字符串 用户头像:url 用户 ...

  4. SpringBoot 使用WebSocket打造在线聊天室

    教程: https://www.jianshu.com/p/55cfc9fcb69e https://wallimn.iteye.com/blog/2425666 关于websocket基础普及见:h ...

  5. Java和WebSocket开发网页聊天室

    小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ Java和WebSocket开发网页聊天室 一.项 ...

  6. 基于react+react-router+redux+socket.io+koa开发一个聊天室

    最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...

  7. 分享基于 websocket 网页端聊天室

    博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...

  8. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  9. SpringBoot+Vue+WebSocket 实现在线聊天

    一.前言 本文将基于 SpringBoot + Vue + WebSocket 实现一个简单的在线聊天功能 页面如下: 在线体验地址:http://www.zhengqingya.com:8101 二 ...

  10. web即时通讯2--基于Spring websocket达到web聊天室

    如本文所用,Spring4和websocket要构建web聊天室,根据框架SpringMVC+Spring+Hibernate的Maven项目,后台使用spring websocket进行消息转发和聊 ...

随机推荐

  1. NetCore 使用 Swashbuckle 搭建 SwaggerHub

    什么是SwaggerHub? Hub 谓之 中心, 所以 SwaggerHub即swagger中心. 什么时候需要它? 通常, 公司都拥有多个服务, 例如商品服务, 订单服务, 用户服务, 等等, 每 ...

  2. w11默认调用ie浏览器方法

    作为公司的一个it人员,最近发现w11不能不能调用ie,导致公司的系统不能正常使用,因为后台插件室默认调用ie,如果重新写插件太麻烦,所以百度了下,亲测可用,目前,公司电脑已经可以正常使用,具体方法如 ...

  3. [Java SE/Junit] 基于Java的单元测试框架Mockito

    Mockito 是一个模拟测试框架,主要功能是在单元测试中模拟类/对象的行为. 1 为什么要使用Mockito? Mock可以理解为创建一个虚假的对象,或者说模拟出一个对象.在测试环境中用来替换掉真实 ...

  4. subprocess,哈希,日志模块

    hashlib模块: # 1. 先确定你要使用的加密方式: md系列,sha系列 md5 = hashlib.md5() # 指定加密方式 # 2. 进行明文数据的加密 data = 'hello12 ...

  5. sql 开窗函数排序遇到空值的处理办法

    sql sever默认null最小 升序排序 null值在最前面,若要放在后面,则: order by case when col is null then 1 else 0 end, col 降序排 ...

  6. csv数据集按比例分割训练集、验证集和测试集,即分层抽样的方法

    一.一种比较通俗理解的分割方法 1.先读取总的csv文件数据: import pandas as pd data = pd.read_csv('D:\BaiduNetdiskDownload\weib ...

  7. Go语言核心知识回顾(接口、Context、协程)

    温故而知新 接口 接口是一种共享边界,计算机系统的各个独立组件可以在这个共享边界上交换信息,在面向对象的编程语言,接口指的是相互独立的两个对象之间的交流方式,接口有如下好处: 隐藏细节: 对对象进行必 ...

  8. Ubuntu-管理开机自启动服务

    1. 管理服务启停工具 systemctl -- 将应用程序抽象为一个service,然后对这个service进行创建.启停.状态查看.配合journalctl进行日志管理 子命令 效果 start ...

  9. Java8 Stream流的合并

    最近的需求里有这样一个场景,要校验一个集合中每个对象的多个Id的有效性.比如一个Customer对象,有3个Id:id1,id2,id3,要把这些Id全部取出来,然后去数据库里查询它是否存在. @Da ...

  10. CS144 计算机网络 Lab4:TCP Connection

    前言 经过前面几个实验的铺垫,终于到了将他们组合起来的时候了.Lab4 将实现 TCP Connection 功能,内部含有 TCPReceiver 和 TCPSender,可以与 TCP 连接的另一 ...