黑马Java后端项目实战--在线聊天交友

news2024/12/25 9:35:45

【课程简介】

越来越多的系统都有消息推送的功能,如聊天室、邮件推送、系统消息推送等;

要实现消息推送就需要服务端在数据有变化时主动推送消息给客户端,本次课程将带大家使用websocket实现消息推送。

【主讲内容】

1.方法:如何快速上手新项目
2.技术:消息推送方案+websocket原理
3.实战:实现案例网页版聊天室

【课程详情】

Java后端项目实战--在线聊天交友

消息推送常用方式介绍

 

 SSEserver-sent event):服务器发送事件

SSE在服务器和客户端之间打开一个单向通道

服务端响应的不再是一次性的数据包,而是text/event-stream类型的数据流信息

服务器有数据变更时将数据流式传输到客户端

 WebSocket是一种在基于TCP连接上进行全双工通信的协议

说明:

全双工(Full Duplex):允许数据在两个方向上同时传输。

半双工(Half Duplex):允许数据在两个方向上传输,但是同一个时间段内只允许一个方向上传输。

原理解析

请求数据

GET ws://localhost/chat HTTP/1.1

Host: localhost

Connection: Upgrade

Upgrade: websocket

Sec-WebSocket-Version: 13

Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

Sec-WebSocket-Extensions: permessage-deflate

响应数据

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

Sec-WebSocket-Extensions: permessage-deflate

websocket API

客户端【浏览器】API

websocket对象创建

let  ws  =  new WebSocket(URL);

格式:协议://ip地址/访问路径

协议:协议名称为 ws

websocket对象相关事件

websocket对象提供的方法 

客户端【浏览器】API

 

服务端 API

Tomcat的7.0.5 版本开始支持WebSocket,并且实现了Java WebSocket规范。

Java WebSocket应用由一系列的Endpoint组成。Endpoint 是一个java对象,代表WebSocket链接的一端,对于服务端,我们可以视为处理具体WebSocket消息的接口。

我们可以通过两种方式定义Endpoint:

第一种是编程式, 即继承类 javax.websocket.Endpoint并实现其方法。

第二种是注解式, 即定义一个POJO, 并添加 @ServerEndpoint相关注解。

Endpoint实例在WebSocket握手时创建,并在客户端与服务端链接过程中有效,最后在链接关闭时结束。在Endpoint接口中明确定义了与其生命周期相关的方法, 规范实现者确保生命周期的各个阶段调用实例的相关方法。生命周期方法如下

服务端如何接收客户端发送的数据呢? 

 编程式

通过添加 MessageHandler 消息处理器来接收消息

注解式

在定义Endpoint时,通过@OnMessage注解指定接收消息的方法

服务端如何推送数据给客户端呢?

发送消息则由 RemoteEndpoint 完成, 其实例由 Session 维护。

发送消息有2种方式发送消息

通过session.getBasicRemote 获取同步消息发送的实例 , 然后调用其 sendXxx()方法发送消息

通过session.getAsyncRemote 获取异步消息发送实例,然后调用其 sendXxx() 方法发送消息

 

 项目实现---在线聊天室实现

需求:通过websocket实现在线聊天室

 

 

 

流程分析

 消息格式 

客户端 --> 服务端  {"toName":"张三","message":"你好"}

服务端 --> 客户端

系统消息格式:{"system":true,"fromName":null,"message":["李四","王五"]} 

推送给某一个用户的消息格式:{"system":false,"fromName":"张三","message":"你好"}

代码实现

引入坐标

编写配置类,扫描添加有@ServerEndpoint注解的 Bean 

编写配置类,用于获取 HttpSession 对象 

@ServerEndpoint 注解中引入配置器 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349739.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ANR系列(二)——ANR监听方案之WatchDog

前言 ANR的监控在Android6.0之前可以通过监听文件data/anr/trace读取trace信息来分析,但从6.0之后就被禁止了。随着Android的发展,手机里的ANR越来越多,对ANR的监控方案也就五花八门。 WatchDog方案 WatchDog是个开源的框架,是…

大漠插件最新中文易语言模块7.2302

模块名称:大漠插件中文模块最新通用7.2302模块简介:大漠插件中文模块最新通用7.2302模块特色:原翻译:花老板完善命令备注:易生易世本人花费一个月时间才将命令完善了插件的备注说明.且用且珍惜去掉了大漠插件定制版类.因为没用.模块特色:什么是中文模块?大漠插件模块是由大漠类…

Java SPI 概念和应用实现

Java SPI 测试 Demo一.SPI 简介1.概念 SPI 与 API2.作用二.Jdk SPI 实现1.SPI 接口定义2.SPI 实现类定义3.SPI 配置4.测试三.SpringBoot SPI 实现1.引入 SpringBoot 依赖2.SpringBoot SPI 配置3.测试一.SPI 简介 1.概念 SPI 与 API SPI 全称:Service Provider Int…

Xshell连接阿里云服务器搭建网站

一、建设一个网站的基本要求 申请一个独立的域名申请一台云服务器ECS在服务器上安装网站环境,如:Apache发布网站内容至云服务器将第一步注册的域解析至云服务器的外网IP地址进行ICP备案 二、用户访问网站的过程 在浏览器上输入域名浏览器自动调用DNS&…

SPI(服务提供发现机制)简单使用

一、概述 SPI的英文全称是Service Provider Interface,是Java内置的一种服务提供发现机制。一般常用于一些框架或组件库的开发,我们最熟悉JDBC就应用到了SPI机制,并且在Spring、Dubbo中也大量应用了SPI机制。SPI机制是针对同一个接口采用不同…

质量小议18 -- 熵

未能深入理解其包含的物理意义,浅记于此,以求理解对抗有自然无序的过程。 熵,对系统无序程序的度量,表征系统混乱程度。系统总是由有序向无序,最后走向静寂。 关键词:1. 无序和混乱;2. 有序向无…

Java中static关键字和代码块的学习

本文介绍了Java中static关键字的使用,即静态成员变量和成员方法以及使用,静态与非静态成员变量和方法的对比总结 Java中的代码块介绍与最后结合代码块和构造方法后的初始化代码执行顺序的练习 static和代码块的学习三.认识static关键字1.static修饰成员变量2.static修饰成员方法…

GAMES101-计算机图形学入门 LEC4: TRANSFORMATION-3D

本节课程视频地址:https://www.bilibili.com/video/BV1X7411F744/?p4 补充上一节课的一个内容,旋转矩阵的逆矩阵是它的转置,也就是说有R−θRθ−1RθTR_{-\theta} R_\theta^{-1}R_\theta^TR−θ​Rθ−1​RθT​ 上节课讲了,…

【go】结合一个go开源项目分析谷歌浏览器cookie为什么不安全 附go项目导包失败怎么解决教程

本文创作背景 源于谷歌浏览器提示密码被泄露 并且某站很快收到了异地企图登录的提醒。 当即怀疑是不是谷歌浏览器保存的密码不安全,最后查阅诸多资料 并找到一个go语言编写的开源项目进行研究,虽然最终不能确定密码是如何泄露的 但研究结论还是让人不由感…

在华为MateBook Ego的arm windows 11上安装hyper-V虚拟机

入手一台华为matebook Ego的笔记本,由于想要测试一些arm的驱动功能,经常会把系统搞蓝屏,于是想安装一个虚拟机,于是试了vmware ,visual-box,由于本机是arm架构上面两个软件都无法进行正常安装,可能是由于有…

Excel+SQL实战项目 - 餐饮业日销售情况分析仪

目录1、要完成的任务2、认识数据3、SQL数据加工4、excel形成分析仪1、要完成的任务 目标:结合SQL和excel实现餐饮业日销售情况分析仪,如下表: 认识分析仪: 切片器:店面 分为四部分:KPI 、组合图、饼图、数…

如何自学芯片设计?

众所周知,芯片设计自学还是比较困难的,更不存在速成的。这里简单说一下学习的规划。 学会相应的知识 无论是科班毕业,还是理工科专业,想要入行IC,那就一定要具备相关的基础知识。尤其是在学校里,学习的很…

Centos7 内核升级

一、背景 在 CentOS 使用过程中,高版本的应用环境可能需要更高版本的内核才能支持,所以难免需要升级内核,所以下面将介绍yum和rpm两种升级内核方式。 关于内核种类: kernel-ml——kernel-ml 中的ml是英文【 mainline stable 】的缩写&…

2W字正则表达式基础知识总结,这一篇就够了!!(含前端常用案例,建议收藏)

正则表达式 (Regular Expression,简称 RE 或 regexp ) 是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")正则表达式使用单个字符串来描述、匹配一系列匹…

wpscan常见的使用方法

目录 简单介绍 暴力破解 信息收集 指定用户爆破 命令集合 简单介绍 Wordpress是一个以PHP和MySQL为平台的免费自由开源的博客软件和内容管理系统。 WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安…

微信微店怎么开店铺步骤【微信开店】

商家在微信平台主要是通过什么方式进行卖货呢,大家的答案都会是微信小店、小程序微店铺之类的,的确微信店铺是商家在微信平台上重要的卖货渠道,那么微信微店怎么开店铺,下面就给大家分享微信微店怎么开店铺步骤。 一、准备好资料…

Netty启动流程源码剖析

案例 本文利用natty-all-source 包下的的demo案例 echo来分析下源码,代码如下:server 端代码 /*** Echoes back any received data from a client.*/ public final class EchoServer {static final boolean SSL System.getProperty("ssl") …

day14_oop_抽象_接口

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、抽象 三、接口 零、 复习昨日 多态的好处: 扩展性强.加入新的功能,不需要改动代码降低代码耦合度(解耦合或者松耦合) 一、抽象类 1.1 抽象类…

C# VS2010 Winform 学习笔记遇见问题

参考书本《Visual C# .Net程序设计与应用开发》 学习C#: 对象的封装性:通过get()、set()函数读写。 1.Visual C#面向对象编程中的继承、多态。 2.enum:枚举,array.copy方法:数组拷贝,public static voi…

以应用为导向,看声纹识别中的音频伪造问题

声纹识别,又称说话人识别,是根据语音信号中的声纹特征来识别话者身份的过程,也是一种重要的生物认证手段。历经几十年的研究,当前声纹识别系统已取得了令人满意的性能表现,并在安防、司法、金融、家居等诸多领域中完成…