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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> WebSocket(一):基于Spring Boot项目配合H5标准的WebSocket服务端 -> 正文阅读

[网络协议]WebSocket(一):基于Spring Boot项目配合H5标准的WebSocket服务端

系列文章目录

WebSocket(一):基于Spring Boot项目配合H5标准的WebSocket服务端
WebSocket(二):完全基于Spring Boot项目的WebSocket服务端



前言

此系列文章为记录使用WebSocket的相关过程,如有错误的地方,还请指正。


一、WebSocket

WebSocket 也是一种全双工通信的协议,既允许客户端向服务器主动发送消息,也允许服务器主动向客户端发送消息。在 WebSocket 中,客户端和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,进行双向数据传输。

WebSocket 协议本质上是一个基于 TCP 的协议。为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,附加信息如图所示:
发起一次WebSocket连接
从请求头可以看到Connection请求升级协议,并附带Sec-WebSocket-Key该WebSocket与服务端通讯的“钥匙”,Sec-WebSocket-Version升级到的版本,Upgrade升级协议格式。
在这里插入图片描述
从响应头可以看到Connection表示请求已升级,Upgrade升级后的协议格式。

二、使用步骤

1.引入库

<!--spring boot starter websocket已经包含了此依赖
<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>

2.编写Spring Boot启动入口

注意:因为我的WebSocket在其他的maven module模块,所以我这里才加了@SpringBootApplication的扫描包路径,所以WebSocket的实现如果是在@SpringBootApplication类的同包或子包下,就不用加扫描,Spring Boot默认扫描自身的包及子包路径。
@SpringBootApplication(scanBasePackages = "cn.test.websocket")
public class MainApp {
  public static void main(String[] args) {
    SpringApplication.run(MainApp.class);
    }

2.编写WebSocket服务端

编写配置WebSocket配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
@EnableWebSocket
public class WSConfig  {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
编写配置WebSocket服务端实现,发现除了Component注解,其实都来自于tomcat-embed-websocket包。
import org.springframework.stereotype.Component;

import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@Component
@ServerEndpoint("/mq-server/server/{pathId}")
public class WSServer{

    private Session session;

    @OnOpen
    public void onOpen(@PathParam("pathId") String pathId, Session session) throws IOException {
        this.session = session;
        //通过{}和@PathParam注解,可以在这个ws连接中动态设置占位符信息
        System.out.println("pathId:" + pathId);
        //可以获取请求的参数,建立可以跟http一样,用?带参数过来,每一个客户端连接都对应一个session
        System.out.println(session.getQueryString());     
    }

    @OnMessage
    public void onMessage(String message) {
        System.out.println("WebSocket onMessage:" + message);
        System.out.println(session);
    }


}

3.测试结果

1.搜索websocket在线工具
2.输入ws://localhost:8080/mq-server/server/路径?clientId=123123&userName=123&password=123
(端口是springboot配置文件中设置的server.port)
3.点击连接
4.查看控制台输出

二月 25, 2022 10:40:40 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring DispatcherServlet 'dispatcherServlet'
pathId:路径
clientId=123123&userName=123&password=123

三、总结

参考:官方文档
参考:https://www.cnblogs.com/bianzy/p/5822426.html
参考:https://blog.csdn.net/coder_what/article/details/109032940
流程笔记:
(1)核心的注解@ServerEndpoint是来自于Javaee的标准中的注解,但是在springboot项目中内置的tomcat已经对其进行了实现,所以如果是传统的项目就需要单独引入javaee-api的依赖。
(2)创建ServerEndpointExporter的bean对象,这个bean会自动注册使用了@ServerEndpoint注解声明的类。(注意,如果使用独立的servlet容器,而不是直接使用springboot的内置容器,就不要注入ServerEndpointExporter,因为它将由容器自己提供和管理。)

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:59:55  更:2022-02-28 16:02:21 
 
开发: 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/26 7:29:55-

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