SpringBoot+Websocket+Vue的使用

  • Post author:
  • Post category:vue




SpringBoot+Websocket+Vue的使用

首先是对websocket进行讲解



简介

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

HTML5 定义的 WebSocket 协议,WebSocket 是独立的、创建在 TCP 上的协议;Websocket 通过HTTP/1.1 协议的101状态码进行握手;为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。它能更好的节省服务器资源和带宽,并且能够更实时地进行通讯[1]。

来自菜鸟教程

[1] HTML5 WebSocket

菜鸟教程


WebSocket使得客户端和服务器之间的数据交换变得更加简单



整合到SpringBoot

依赖:

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

ServerEndpointExporter DI

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

配置服务

@ServerEndpoint("/room/{nickName}")
public class WebSocketServerService {
    /**
     * 建立会话
     *
     * @param session  会话
     * @param nickName 昵称
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("nickName") String nickName) {
       // 对连接建立后的操作,这里添加会话或者对上线信息进行发送
    }

    /**
     * 关闭连接
     */
    @OnClose
    public void onClose() {
       // 关闭连接时的操作,这里在关闭连接时会调用此方法,可以做退出提示
    }

	/**
     * 消息发送(有点相像Controller层的方法参数设计,只是多了session)
     *
     * @param session  会话(当前)
     * @param nickName 昵称
     *  @param msg 消息
     */
    @OnMessage
    public void OnMessage(Session session, @PathParam("nickName") String nickName, String msg) {
        // 发送消息操作,当会话发送消息时会调用这个方法
    }

    /**
     * 发生错误时调用   
     */
    @OnError
    public void onError(Session session, Throwable error) {
    // 案例
        log.error("发生错误,用户:{},发生错误", session.getId());
        error.printStackTrace();
    }

    /**
     * 群发自定义消息
     */
    public void broadcast(String message) {
    // webSocketSet是存放会话(Session)的集合
        webSocketSet.forEach(item -> {
            try {
            // 判断会话是否连接
                if (item.session.isOpen()){
                // 发送同步信息到当前会话
                    item.session.getBasicRemote().sendText(message);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}

有两种会话发送信息的方法:


  • session.getBasicRemote().sendText(message)

    :同步发送信息

  • session.getAsyncRemote().sendText(message)

    :异步发送信息

有了以上操作即可完成一个最简单的websocket服务器了,接下来是vue的websocket使用。



Vue中使用websocket

初始化

init() {
     let url = 'wss://你的websocket服务地址'
       // 创建websocket连接
      this.websock = new WebSocket(url);
    // 监听打开
      this.websock.onopen= this.websockOpen;
    // 监听关闭
      this.websock.onclose = this.websockClose;
    //监听异常
      this.websock.onerror = this.websockError;
    //监听服务器发送的消息
      this.websock.onmessage = this.websockMessage;
    },

方法回调

websockOpen() {
     console.log('监听连接建立')
     // 渲染操作
 },
websockClose() {
	console.log('监听连接关闭')
	// 渲染操作
},
websockError() {
	console.log('监听异常')
	// 渲染操作
}
websockMessage(e) {
	console.log('监听服务器发送的消息',e.data)
	// 渲染操作
}



整合项目展示


简单的聊天室实现


登录


登录操作


聊天室

(三种浏览器里的展示,成员展示聊天人数,成员列表“昵称-频道号”)

在这里插入图片描述


群聊


在这里插入图片描述


私聊

(自己无法点击,点击他人会在默认添加“@xxx”,发送信息即可私聊)

私聊


成员退出

(减少人数,并广播成员退出)

成员退出

想要源码请点击->

源码地址


觉得好麻烦点个赞谢谢!(^o^)



版权声明:本文为weixin_42313701原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。