`

172.Spring Boot WebSocket:编码分析

阅读更多

 

【视频&交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

前言:

       在上一篇文章中讲到了WebSocket的原理,这节中我们先简单的编码分析下,这样有助于在之后的实战编码。

说明:

(1)编码中使用的Spring Boot版本是: 1.5.8

(2) 使用WebSocket有两种方式: 第一种方式使用socketJS, 第二种方式是使用H5的标准。实例中使用的是第二种方式

(3)最后提供源代码;

 

 

编码分析:

       在例子中,我们需要编写两端的代码:服务端和客户端(当然代码都在一个工程里)。

1Client:客户端说明

       客户端的代码主要是使用H5WebSocket进行实现,在前端网页中使用WebSocket进行连接服务端,然后建立Socket连接进行通讯。

2Server:服务端说明

       服务端主要是建立多个客户端的关系,进行消息的中转等。客户端成功连接到服务端之后,就可以通过建立的通道进行发送消息到服务端,服务端接收到消息之后在群发给所有的客户端。

3)客户端和服务端怎么连接?

       客户端通过JS中的WebSocket对象进行连接到服务端:

var websocket = new WebSocket("ws://localhost:8080/websocket");

   

    服务端映射出在上面使用的/websocket端点呢,使用注解@ServerEndpoint即可:

@ServerEndpoint(value = "/websocket")

   

    当客服端有连接请求了,服务端怎么接收请求,使用注解@OnOpen即可:

@OnOpen
public void onOpen(Session session) {
        this.session = session;
 }

 

 

4)客户端和服务端怎么发送消息?

       客户端可以使用webSocket提供的send()方法,如下代码:

//获取输入的文本信息进行发送

var message = document.getElementById('text').value;
websocket.send(message);

 

     

    服务端怎么发送消息呢?主要是使用在成功建立连接的时候,创建的Session对象进行发送,如下代码:

 session.getAsyncRemote().sendText("恭喜您成功连接上WebSocket");

  

5)客户端和服务端怎么接收消息?

       客户端接收消息消息使用的是websocketonmessage回调方法,如下代码:

websocket.onmessage = function(event) {
           //文本信息直接显示,如果是json信息,需要转换下在显示.
       var data = event.data;
       document.getElementById('message').innerHTML += data;
}

 

       服务端怎么接收到消息,使用注解@OnMessage,如下代码:

@OnMessage
public void onMessage(String message, Session session) {
        System.out.println("来自客户端的消息:" + message);
}

 

 

6)客户端和服务端关闭连接处理?

       客户端使用websocket.close()进行关闭连接;

       服务端使用@OnClose注解监听客户端的关闭动作。

 

7)客户端和服务端异常处理?

       客户端当有异常信息的时候会回调方法:websocket.onerror

       服务端使用@OnError注解监听异常信息。

 

8)群聊原理(群发消息)

       服务端在和客户端建立连接的时候,会创建一个webSocket对象,我们会将每个连接创建的对象进行报错到一个列表中,比如:CopyOnWriteArraySet(这是线程安全的);在要进行群发的时候,编写我们的列表对象进行群发消息。

 

9)单聊原理(一对一消息)

       单聊的时候,就无需遍历列表,而是需要知道发送者和接受者各自的Session对象,这个Session对象怎么获取呢?Session可以获取到sessionId,发送者在发送消息的时候,携带接收消息的sessionId,那么问题就演变成了:发送者怎么知道接受者的sessionId,那就是加入一个在线用户列表即可,在线用户列表中有用户的基本信息,包括sessionId

       明白了这些,在接下里的编码中就会轻松很多。

 

 

 

分享到:
评论

相关推荐

    Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送

    Spring Boot作为Java生态中的微服务框架,提供了方便地集成WebSocket的功能,使得开发者能够轻松构建实时交互的应用,如群聊、点对点聊天以及发送图片和音频等富媒体消息。 首先,集成WebSocket到Spring Boot项目中...

    spring-framework-5.3.23 源码

    Spring Boot简化了Spring应用程序的启动和配置,而Spring Cloud则为微服务架构提供了工具和服务发现、配置中心、负载均衡等功能。 Spring Framework 5.3.23版本的更新可能包括性能提升、新的API和改进的兼容性。...

    java版本使用springboot vue websocket webrtc实现视频通话

    在视频通话系统中,Spring Boot可以作为后端服务器,处理用户请求、管理数据流、以及与WebSocket连接进行交互。 2. **Vue.js**:Vue.js是一个轻量级的前端JavaScript框架,用于构建用户界面。在本项目中,Vue.js将...

    spring-framework-4.3.7.RELEASE官方完整包加官方文档

    6. **Spring Boot**:虽然不在 4.3.7.RELEASE 版本内,但 Spring Boot 已经成为构建 Spring 应用的主流方式,它简化了配置,提供了开箱即用的功能,适用于快速开发。 7. **注解驱动的开发**:Spring 4.3.x 版本强化...

    .基于springboot websocket定制,完成的功能的状态管理具备单机和集群能力.zip

    2,使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值...

    基于Spring Boot技术的幼儿园管理系统lw+ppt.rar

    Spring Boot的核心理念是“约定优于配置”,它默认配置了许多常见的服务,如数据源、JPA、WebSocket等,使得开发者能够专注于业务逻辑,而不是底层配置。 二、Spring Boot在幼儿园管理系统中的应用 1. 系统架构...

    Spring Boot核心技术-笔记-pdf版.pdf

    Spring Initializr是一个在线生成Spring Boot项目结构的工具,通过选择技术栈、版本等,可以快速生成一个基础的Spring Boot项目结构,便于开发者快速开始编码。 8. **Web开发** Spring Boot对Web开发提供了很好的...

    Springboot017学生读书笔记共享.zip

    1. "论文.lw.doc":可能是一篇关于Spring Boot的学术论文或研究文档,讨论了Spring Boot的技术特点、优势和应用场景,或者分析了相关项目案例。 2. "readme(重要).txt":这是一个重要的说明文件,很可能包含了对...

    基于Spring Boot框架的学生作业管理系统lw+ppt.rar

    其次,Spring Boot的起步依赖让开发者能够通过简单的声明式方式引入所需的功能模块,如Spring Data JPA用于数据库操作,Spring Security提供安全控制,Spring WebSocket支持实时通信等。在学生作业管理系统中,可能...

    java 管理系统

    1. Spring Boot:简化了Java Web应用的开发,提供了依赖注入、AOP(面向切面编程)、数据访问等功能。 2. MyBatis:轻量级的持久化框架,简化了SQL操作,提高了开发效率。 3. Spring Security:提供身份验证和授权...

    springboot448教学辅助系统pf.zip

    1. Spring Boot:作为基础框架,负责自动配置、依赖管理和应用启动。 2. Thymeleaf或FreeMarker:作为模板引擎,用于生成动态HTML页面。 3. Spring Data JPA或MyBatis:处理数据库操作,简化数据访问层代码。 4. JWT...

    基于SpringBoot的大学生心理咨询系统.zip

    使用Spring Data JPA进行数据操作,利用WebSocket实现即时通讯,支持在线对话功能。 3. 数据库:MySQL作为关系型数据库,存储用户信息、咨询记录、心理测试结果等数据。 4. 安全:利用Spring Security进行权限管理...

    springboot基于spring boot的在线答题微信小程序 lw+ppt.rar

    标题中的“springboot基于spring boot的在线答题微信小程序”表明这是一个使用Spring Boot技术构建的,与微信小程序结合的在线答题应用。Spring Boot是Java领域的一个轻量级框架,它简化了Spring应用程序的初始设置...

    Springboot入门到精通.pdf

    2. **简化编码**:通过自动配置,Spring Boot能根据项目中的类和jar依赖自动配置Bean,使得开发者可以专注于业务逻辑,而不是基础设施的配置。例如,引入`spring-boot-starter-web`后,无需额外配置就能启动HTTP...

    spring-5.2.5.RELEASE-dist.zip

    1. **依赖注入 (Dependency Injection, DI)**:Spring 框架的核心特性之一是依赖注入,它允许对象之间的关系在运行时被定义和管理,而不是硬编码在类内部。这增强了代码的可测试性和可维护性。在 5.2.5 版本中,DI ...

    547交流互动系统(1).zip

    【springbootn4h17】 这个文件名可能是某种编码或者缩写,没有更多信息无法具体解读。但根据上下文,可能是一个特定的Spring Boot项目的版本号或者是模块名,比如“n4h”可能代表“network”,“17”可能表示版本号...

    Craig Walls 著 张卫滨 翻译 - spring inaction (spring 实战 第四版 )

    7. **Spring Boot**:虽然不在4.0版本中首次引入,但在这个版本中,Spring Boot已经逐渐成熟,它简化了Spring应用的初始设置,通过"约定优于配置"的理念,让开发者可以快速搭建应用。 8. **测试支持**:Spring框架...

    基于Spring Boot框架的即时通讯系统.zip

    基于Spring Boot框架的即时通讯系统 项目简介 本项目是一个基于Spring Boot框架的即时通讯系统,旨在提供一个高效、可靠的即时通讯解决方案。系统支持多种消息传输方式,包括WebSocket和Polling,并集成了MongoDB...

    springboot实现远程控制

    在本项目中,"springboot实现远程控制"是一个利用Spring Boot技术栈构建的后端服务,结合了Java的Robot类和WebSocket技术,旨在创建一个简单的远程控制应用。这个应用允许用户通过浏览器(B/S架构)进行远程操作,实现...

    卫通星GPS定位器GT06协议socket通讯JAVA Spring Boot对接

    本文将详细讨论如何使用卫通星GPS定位器GT06的通信协议,通过Socket进行数据传输,并结合Java与Spring Boot框架实现后台服务的对接。 卫通星GPS定位器GT06是一款基于GSM网络的车载定位设备,它能够实时发送位置、...

Global site tag (gtag.js) - Google Analytics