SpringBoot+WebSocket群聊功能完整代码实例

QT 网络通讯软件群聊源码 <br />QT 网络通讯软件群聊源码<br />xteam.h-------------------------------------------------------------<br />#include<QtGui><br />#include <QtGui/QWidget><br />#include <QtNetwork><br />#include <QTcpSocket><br />#include <QUdpSocket><br />#include <QAbstractSocket> 阅读详情

效果图

每一个浏览器打开都会生成一个随机数,当然你也可以通过ip来控制,目的是实现即时通讯的功能.
接下来的代码都是全部的代码,你可以直接拿过来用就行.终极目的是通过简单示例了解他的沟通过程
目前是群发广播,如果想要实现一对一聊天的话,就需要记录userid来区分用户进行广播.也就是点对点的即时通讯.入门建议先走一遍群发广播.

在这里插入图片描述

准备条件

Java首先引入maven-版本根据你的spring-boot版本就行

<!--websocket 即时通讯-->
<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

配置类

准备config类直接复制就行

import org.springframework.context.annotation.Bean;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * @author hanfeng
 * @date 2022/1/14
 */
@Component
public class WebSocketAutoConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}

WebSocket相应类

此部分是从网上复制过来的比较简单,但我这个是用的jwt令牌鉴权的,所以还需要再写一套鉴权的过程代码,此处只是简单实现.

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * @author hanfeng
 * @date 2022/1/19
 */
@Component
@ServerEndpoint ("/webSocket")
@Slf4j
public class WebSocket {

    private Session session;

    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();

    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        //这里就是我们所提交的token
        //String submitedToken=session.getHandshakeHeaders().get("sec-websocket-protocol").get(0);
        webSocketSet.add(this);
        this.sendMessage("第一次回应消息");
        log.info("【websocket消息】有新的连接, 总数:{}", webSocketSet.size());
    }
    //https://my.oschina.net/xiedeshou/blog/1927371
    @OnClose
    public void onClose() {
        webSocketSet.remove(this);
        log.info("【websocket消息】连接断开, 总数:{}", webSocketSet.size());
    }

    @OnMessage
    public void onMessage(String message) {
        log.info("【websocket消息】收到客户端发来的消息:{}", message);
        this.sendMessage(message);
    }

    public void sendMessage(String message) {
        for (WebSocket webSocket : webSocketSet) {
            log.info("【websocket消息】广播消息, message={}", message);
            try {
                webSocket.session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

前端代码

前端代码之前不是这样,我做了一个小小的完善.

<html>
<head>
    <meta charset="UTF-8">
    <title>websocket测试</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <style type="text/css">
        h3,h4{
            text-align:center;
        }
		#messageId{
			width:1070px;
			height:500px;
			margin:0 auto;
			border:1px solid #e5e5e5;
			  background: #ece9e6;
			  background: -webkit-linear-gradient(to bottom, #ffffff, #ece9e6); 
			  background: linear-gradient(to bottom, #ffffff, #ece9e6);
			padding:10px;
			overflow-y:auto;
		}
		#messageId p{
			margin-bottom:8px;
		}
		.wby{
			height:60px;
			resize:none;
			margin-top:10px;
			padding:10px;
		}
		.shuru{
			position:relative;
			width:1090px;
			margin:0 auto;
		}
		.sendMsg{
			position:absolute;
			right:5px;
			bottom:5px;
			width:60px;
			height:25px;
			line-height:25px;
			border:none;
			background-color:green;
			color:#fff;
			border-radius:5px;
		}
    </style>
</head>
<body>

<h3>WebSocket小组聊天室</h3>

<div id = "messageId"></div>
<form onsubmit="return false" action="##" id="formtest">
	<div class="shuru">
		<textarea class="wby" name="msg" cols="150" value="" onkeypress="BindEnter();"></textarea>
		<input class="sendMsg" type="button" value="发送" onclick="sendMessage()" >
	</div>
</form>

<script type="text/javascript" >
    var socket;
	var ceil = Math.ceil(Math.random()*10);
    if (typeof (WebSocket) == "undefined") {
        console.log("遗憾:您的浏览器不支持WebSocket");
    } else {
        console.log("恭喜:您的浏览器支持WebSocket");
        //实现化WebSocket对象
        //指定要连接的服务器地址与端口建立连接
        //注意ws、wss使用不同的端口。我使用自签名的证书测试,
        //无法使用wss,浏览器打开WebSocket时报错
        //ws对应http、wss对应https。
        socket = new WebSocket("ws://127.0.0.1:80/webSocket");
        //连接打开事件
        socket.onopen = function() {
            console.log("Socket 已打开");
            socket.send('<p style="color:#999;text-align:center;font-size:3px">'+ceil+"号:加入群聊"+'</p>');
        };
        //收到消息事件
        socket.onmessage = function(msg) {
            $("#messageId").append('<p style="font-size:15px">'+ msg.data+'</p>');
            console.log(msg.data);
        };
		 //发送消息事件
        socket.sendMessage = function(msg) {
			socket.send(ceil+"号: "+msg);
            $(".wby").val('');
        };
        //连接关闭事件
        socket.onclose = function() {
            console.log("Socket已关闭");
        };
        //发生了错误事件
        socket.onerror = function() {
            alert("Socket发生了错误");
        }
        //窗口关闭时,关闭连接
        window.unload=function() {
            socket.close();
        };
    }
	
	function sendMessage() {
		var msg = $("textarea[name='msg']").val();
		socket.sendMessage(msg);
	}
	
	function BindEnter(e){
		var evt  = window.event || e;
		if(evt.keyCode == 13){
			//回车事件
			var msg = $("textarea[name='msg']").val();
			socket.sendMessage(msg);
		}
	}
</script>

</body>
</html>

SpringBoot+websocket实现私聊和群聊(可以发送文字和图片) Websocket实现私聊和群聊1. websocket的概念1.1. 全双工概念2. websocket实现聊天室2.1. WebSocket API2.1.1. 构造方法2.1.1.1. 语法2.1.1.2. 参数2.1.1.3. 抛出异常2.1.2. 常量2.1.3. 属性2.1.4. 方法2.1.5. 事件3. websocket实现群聊或私聊或图片发送3.1. 项目的最终目录结构![本图片分为三个小的项目:1.websocket实现群聊;2.websocket实现群聊和私聊;3.websocket 阅读详情

相关推荐

基于Springboot+WebSocket+Netty实现在线聊天、群聊系统

此文主要实现在好友添加、建群、聊天对话、群聊功能,使用Java作为后端语言进行支持,界面友好,开发简单。

wml_JavaKill的博客 2万+

简单群聊代码

package com.zyf.day23; public class ChatMain { public static void main(String[] args) { // TODO Auto-generated method stub ChatReceive chatReceive = new ChatReceive(); chatReceive

china_demon的专栏 1万+

SpringBoot整合websocket实现群聊(1)

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。点击这里领取Web前端开发经典面试题得这些内容对你有帮助,可以扫码获取!!(备注:前端)**

2301_79849953的博客 1247

尚硅谷Netty视频教程(B站超火,好评如潮)之群聊系统源码全网唯独一份~热乎

尚硅谷Netty视频教程(B站超火,好评如潮)之群聊系统源码全网唯独一份~热乎

weixin_48278764的博客 413

python:实现群聊通信(附完整源码)

python:实现群聊通信(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 629

一篇文章带你使用 SpringBoot 搞定 基于WebSocket 的在线群聊实现

文章目录一、添加依赖二、配置 WebSocketConfig三、配置 Message 类和 Chart 类四、配置控制器 GreetingController五、设置前端页面 chat.html六、登录测试 一、添加依赖 加入前端需要用到的依赖: <dependency> <groupId>org.webjars</groupId> <artifactId>sockjs-client</artifac

南淮北安的博客 4501

2024最新群聊源码无限建群创群H5聊天系统聊天网站源码

1.支持自助建群 管理群 修改群资料2.支持自动登录 登陆成功可自助修改资料3.后台可查看群组聊天消息记录4.支持表情 动态表情 图片发布。

fghujjj的博客 1056

SpringBoot与WebSocket整合实现实时群聊功能

Spring Boot是由Pivotal团队提供的一个开源框架,它旨在简化Spring应用的初始搭建以及开发过程。从2014年首次发布以来,Spring Boot凭借其简洁的配置、快速开发的特点迅速得到了广大Java开发者的青睐,成为了微服务架构下的热门选择之一。Thymeleaf是一种现代化的服务器端Java模板引擎,用于Web和独立环境,能够处理HTML、XML、JavaScript、CSS甚至纯文本。

weixin_42576410的博客 840

计算机网络即时通信系统设计_天天玩微信,Spring Boot 开发私有即时通信系统了解一下...

概述利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天。所需依赖Spring Boot 版本 1.5.3,使用MongoDB存储数据(非必须),Maven依赖如下:配置文件内容:大致程序结构,仅供参考:程序结构创建程序启动类,启用WebSocket使用 @EnableWebSocket 注解 配置Spring ...

weixin_30937427的博客 176

Klipper-源码模块

Klippy上位机程序采用多线程架构,包含四个主要进程:主线程处理G代码命令、串口IO线程(C语言实现)、MCU响应处理线程(Python实现)和独立日志线程。代码结构分为三大模块:chelper(C语言辅助函数)、extras(扩展功能如温度控制)和kinematics(运动学模型实现)。核心功能模块包括串口通信(serialhdl.py)、步进电机控制(stepper.py)、运动学计算等,其中C语言实现的底层模块通过serialqueue.c处理高效IO。扩展模块支持热床、传感器等外设,运动学子模块提

weixin_44258581的博客 991

DataEaseV2.9 本地开发环境搭建与调试指南

本文详细指导如何搭建DataEase V2.9的本地开发环境,涵盖从软件准备、源码获取、数据库初始化到在IDEA中配置、编译和调试的全过程。重点解决了本地运行环境的关键配置与常见问题,帮助开发者高效开启DataEase的定制化开发与二次开发。

weixin_29290863的博客 141

springboot+websocket构建在线聊天室(群聊+单聊)

简单聊天室的搭建

maomao的博客 7692

【QT+VS】如何在现有VS项目中添加Qt界面?【全网最详细】

VS项目有了,就缺个QT界面,怎么办呢?这篇文章帮你一键搞定!

深耕CV 4981

【SpringBoot框架篇】18.使用Netty加websocket实现在线聊天功能

使用netty加websocket实现在线聊天功能

皓亮君的博客 1万+

python调用hypermesh调用tcl_TclTk如何调用HyperMesh运行tcl脚本文件

#Tcl/Tk编写界面部分set t [toplevel .tp]focus $tgrab $tset Filename "E:/CAE_Tech/process_files/88/Example.tcl"set Font "Times 12 bold"wm title $t "Call HyperMesh"wm attribute $t -topmost 1wm withdraw $tset t...

weixin_39541681的博客 1599

什么是无人机电源管理模块?电源管理模块有什么用处?

我来描述一下我的问题情景,电源管理模块的定义是,这里给出这个PX4官方对于电源管理模块的一些介绍,补充一下锂电池的放电原理大家就可以更好理解为什么需要电源管理模块

HRWVY0725的博客 2272

SpringBoot与webSocket实现在线聊天室——实现私聊+群聊+聊天记录保存

包结构图: 代码部分: 实体类:UserMessage.java 定义实体类与数据库连接,存储聊天记录 package com.example.springboot_websocket.bean; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; /** * @author Admin

qq_47719491的博客 1万+

5分钟搞定阿里云千问大模型API申请:手把手教你获取API Key

本文提供了一份高效的阿里云通义千问大模型API Key获取实战指南。通过清晰的步骤,帮助开发者在五分钟内完成从账号准备、精准导航控制台到创建并验证API Key的全过程,并强调了密钥安全管理和基础调用测试的重要性,助力快速集成AI能力。

ol789012345的博客 1342

Springboot实现WebSocket群聊简单demo

前言: 这里不做springboot框架搭建步骤,只做具体的实现,代码里有具体注释,所以不做多解释这里。 代码里可能有相关日志的输出用到了slf4j,可以删掉改成System.out.println();看自己喜好。 1、引入WebSocket依赖 <dependency> <groupId>org.springframework....

小白轩的博客 1276

SAP-MM-采购过账接口(与WMS集成)-代码

1、判断传入值非空检验; 2、判断过账日期是否允许在当前期间; 3、判断是否为集采订单业务,是否审批完成; 4、判断是否发布标准成本发布(此业务场景与价格控制3+S有关) 5、保存日志表; 6、判断业务公司订单审批状态; 7、创建STO交货单、集采公司订单过账、STO公司间创建交货单、交货单过账(两步法)、过账失败回滚(冲销交货、删除交货单、冲销集采入库)

qq_32198063的博客 420

190、LLC谐振变换器的样机调试实战(问题定位)

这篇实战笔记总结了LLC谐振变换器样机调试中的五大典型问题及解决方案:1)空载炸机源于谐振电容纹波电流能力不足;2)轻载啸叫因控制环路不稳定,需调整突发模式阈值;3)MOSFET过热由死区时间不当导致,需精确优化实现ZVS;4)输出纹波大由PCB布局耦合引起,需优化共模抑制;5)启动过冲需延长软启动时间。作者强调调试需结合示波器、热成像仪等工具,理论计算与实测并重,并详细记录每次参数调整。文章指出LLC调试是不断试错的过程,关键是通过现象分析本质原因。

Jack010169的博客 46

springboot整合websocket实现群聊 + 私信,可提供源码

websocket怎么说呢,就是服务器可以主动向客户端发起对话! 这样就很好理解了吧! 咱们先上效果图: 相对来说更好看那么一点但是,实现代码都是一样的。我们先来准备工作导入依赖 <!--websocket依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st

nanxiang11的博客 5190

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【分布式WebSocket - 2】springboot整合websocket实现群聊

文章目录实现思路项目展示核心代码pom引入jarWebSocketConfig配置类WebsocketServerEndpoint接收类WebSocketUtil工具类。 实现思路 发送者向服务器发送大家早上好。其它客户端可以收到对应消息。 项目展示 通过springboot引入websocket,实现群聊,通过在线websocket测试进行展示。 核心代码 pom引入jar <parent> <groupId>org.springframework.boot&l

叁滴水 的博客 6872

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

springboot+websocket聊天室(私聊+群聊)

springboot+websocket聊天室,实现了私聊和群聊。

weixin_43165220的博客 6141

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

springboot webSocket实现群聊/单聊

springboot webSocket实现群聊/单聊 webSocket简介: WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 代码: 1.maven依赖: <dependency> <groupId>org.spring

Helloworld_pang的博客 869
上一篇: FileInputStream读取网络文件替换方案
下一篇: Java实现minio文件流下载文件,浏览器不下载
今天又是努力的一天
博客等级 码龄7年 30粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值