IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> springboot整合websocket实现群聊 -> 正文阅读

[网络协议]springboot整合websocket实现群聊

效果:
在这里插入图片描述
也可以打开新窗口连接一个新用户发消息
在这里插入图片描述

1.依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>stomp-websocket</artifactId>
          <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>sockjs-client</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>webjars-locator-core</artifactId>

        </dependency>

除了第一个之外其他的都是前端的依赖包

2.websocket配置:

在这里插入图片描述

@Component

public class WebSocketBean {
private Session session;
}

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry)
    {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/socket");
    }
    @Override
   public void registerStompEndpoints(StompEndpointRegistry registry){
        registry.addEndpoint("/chat").withSockJS();
    }

}

@Controller
public class GreetingController {
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Message greeting(Message message){
        return message;
    }
//  ,@MessageMapping("/hello")注解的方法将用来接收
//    “/app/hello”路径发送来的消息,在注解方法中对消息进行处理后,
//    再将消息转发到@SendTo定义的路径上,
//    而@SendTo路径是一个前缀为“/topic”的路径,
//    因此该消息将被交给消息代理broker,再由broker进行广播。


}
@Data
public class Message {
    private String name;

    private String title;
    private String content;
}

3.前端

<!DOCTYPE html>
<html lang="en">
<head>
    <title>群聊</title>
    <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 src = "/app.js"></script>
</head>

<body>
<div>
    <label for="name">用户名:</label>
    <input type="text" id="name" placeholder="用户名">
</div>
<div>
    <label for="title">标题:</label>
    <input type="text" id="title" placeholder="标题">
</div>
<div>
    <button id="connect" type="button">连接</button>
    <button id="disconnect" type="button" disabled="disabled">断开</button>
</div>
<label for="name">请输入聊天内容:</label>
<input type="text" id="content" placeholder="聊天内容">
<button id="send" type="button">发送</button>
<div id="greetings">
    <div id="conversation" style="display: none">群聊中</div>
</div>
</body>
</html>

app.js:

var stompClient = null
function setConnected(connected) {
    $("#connect").prop("disabled", connected);
    $("#disconnect").prop("disabled", !connected);
    if (connected) {
        $("#conversation").show();
        $("#chat").show();
    } else {
        $("#conversation").hide();
        $("#chat").hide();
    }
   $("#greetings").html("")
}
    function connect(){
        if (!$("#name"). val()) {
            return;
        }
            var socket =new SockJS('/chat');
            stompClient =Stomp.over(socket);
            stompClient.connect({}, function (frame){
            setConnected(true);
            stompClient. subscribe ('/topic/greetings', function (greeting){
            showGreeting (JSON. parse (greeting. body));
        })
        })
}
function disconnect(){
    if (stompClient != null) {
        stompClient.disconnect();}
        setConnected(false);
    }
        function sendName() {
            stompClient.send("/socket/hello", {},
                JSON.stringify({'name': $("#name").val(), 'title':$("#title").val(),'content': $("#content").val()}));
        }
        function showGreeting(message) {
            $("#greetings")
                .append("<div>" + message.name + ": " + message.content +":"+ message.title+ "</div>");
        }
        $(function (){
$("#connect" ).click(function() { connect(); })
$("#disconnect" ).click(function() { disconnect(); })
$("#send").click(function (){ sendName () })
        });

首先使用SockJS建立连接,然后创建一个STOMP实例发起连接请求,在连接成功的回调方法中,首先调用setConnected(true);方法进行页面的设置,然后调用STOMP中的subscribe方法订阅服务端发送回来的消息,并将服务端发送来的消息展示出来(使用showGreeting方法)。

4.注意事项

message一定要有get 和set方法,且属性名要与前端的一一对应
关于前后端中的路径:

  1. registry.addEndpoint("/chat").withSockJS();
    定义一个前缀为/chat的endPoint,并开启sockjs支持,客户端通过这里配置的URL来建立websocket连接

    var socket =new SockJS(’/chat’);

  2. registry.enableSimpleBroker("/topic");
    设置消息代理的前缀,如果消息的前缀是/topic就会转发给消息代理
    @SendTo("/topic/greetings") 将消息转发到sento对应的路径上
    前端js:
    stompClient. subscribe (’/topic/greetings’, function (greeting){
    showGreeting (JSON. parse (greeting. body));
    })

  3. @MessageMapping("/hello")
    用来接收/socket/hello路径发过来的消息,然后再转发到@SendTo定义的路径上

 function sendName() {
            stompClient.send("/socket/hello", {},
                JSON.stringify({'name': $("#name").val(), 'title':$("#title").val(),'content': $("#content").val()}));
        }
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:45:12  更:2021-09-02 11:45:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:54:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码