【视频&交流平台】
http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share
http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share
https://gitee.com/happyangellxq520/spring-boot
http://412887952-qq-com.iteye.com/blog/2321532
需求缘起:
在比很久还很久的时候,就有网友留言:“谁知道为什么websocket在spring boot里用不了吗?”当时吧,因为实际项目中也没有使用WebSocket的需求,所以也就一直没有研究,最近想想还是需要研究,另外博主得说下,博主时间精力有限,没法所有的问题都及时的一个一个解答呀,只能说尽力吧!
在之后的博客会讲到:websocket的概念,websocket的原理,websocket的群聊,websocket单聊……
效果展示:
我们先看下最终要实现的效果【单聊+群聊】,如下图:
à悟空消息:
à师傅消息:
à八戒消息:
长连接的产生
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但不容易直接完成实时的消息推送功能,如聊天室、后台信息提示、实时更新数据等功能,但通过polling、Longpolling、长连接、Flash Socket以及HTML5中定义的WebSocket能完成该功能需要。
一、Socket简介
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。Socket的英文原义是“孔”或“插座”,作为UNIX的进程通信机制。Socket可以实现应用程序间网络通信。
Socket可以使用TCP/IP协议或UDP协议。
1.1 TCP/IP协议
TCP/IP(全称:Transmission Control Protocol/Internet Protocol)传输控制协议/因特网互联协议,又名网络通讯协议。TCP/IP协议是目前应用最为广泛的协议,是构成Internet国际互联网协议的最为基础的协议,由TCP和IP协议组成:
(1)TCP协议:面向连接的、可靠的、基于字节流的传输层通信协议,负责数据的可靠性传输的问题。
(2)IP协议:用于报文交换网络的一种面向数据的协议,主要负责给每台网络设备一个网络地址,保证数据传输到正确的目的地。
2.1 UDP协议
UDP(全称:User Datagram Protocol)用户数据报协议,特点:无连接、不可靠、基于报文的传输层协议,优点是发送后不用管,速度比TCP快。
二、WebSocket简介与消息推送
B/S架构的系统多使用HTTP协议,HTTP协议的特点:
(1)无状态协议;
(2)用于通过 Internet 发送请求消息和响应消息;
(3)使用端口接收和发送消息,默认为80端口(https默认为443);
底层通信还是使用Socket完成。
HTTP协议决定了服务器与客户端之间的连接方式,无法直接实现消息推送,一些变相的解决办法:
2.1 轮询
客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
(1)优点:后端程序编写比较容易。
(2)缺点:请求中有大半是无用,浪费带宽和服务器资源。
(3)实例:适于小型应用。
(4)实现方式:在前端中使用定时器,定时向后台进行请求数据,在js中就是window.setInterval()。
2.2 长轮询
客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
(1)优点:在无消息的情况下不会频繁的请求,耗费资小。
(2)缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
(3)实例:WebQQ、Hi网页版、FacebookIM。
(4)实现方式:Comet异步的ashx。
2.3 Flash Socket
在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。
优点:实现真正的即时通信,而不是伪即时。
缺点:客户端必须安装Flash插件;非HTTP协议,无法自动穿越防火墙。
实例:网络互动游戏。
实现方式:Adobe Flex。
2.4 Websocket
WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。
(1)特点: 事件驱动;异步;使用ws或者wss协议的客户端socket;能够实现真正意义上的推送功能。
(2)缺点:少部分浏览器不支持,浏览器支持的程度与方式有区别。
(3)浏览器兼容性问题:可以使用SockJS+Stomp。
三、WebSocket客户端
websocket允许通过JavaScript建立与远程服务器的连接,从而实现客户端与服务器间双向的通信。在websocket中有两个方法:
(1)send()向远程服务器发送数据
(2)close()关闭该websocket链接
websocket同时还定义了几个监听函数:
(1)onopen当网络连接建立时触发该事件
(2)onerror当网络发生错误时触发该事件
(3)onclose当websocket被关闭时触发该事件
(4)onmessage当websocket接收到服务器发来的消息的时触发的事件,也是通信中最重要的一个监听事件。
websocket还定义了一个readyState属性,这个属性可以返回websocket所处的状态:
(1)CONNECTING(0): websocket正尝试与服务器建立连接
(2)OPEN(1): websocket与服务器已经建立连接
(3)CLOSING(2): websocket正在关闭与服务器的连接
(4)CLOSED(3): websocket已经关闭了与服务器的连接
websocket的url开头是ws, 如果需要ssl加密可以使用wss,当我们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的之后,就可以进行即时通信了。
四、WebSocket服务端
JSR356定义了WebSocket的规范,Tomcat7中实现了该标准。JSR356 的 WebSocket 规范使用 javax.websocket.*的 API,可以将一个普通 Java 对象(POJO)使用@ServerEndpoint 注释作为 WebSocket 服务器的端点。
上面简洁代码即建立了一个WebSocket的服务端,@ServerEndpoint("/push")的annotation注释端点表示将WebSocket服务端运行在ws://[Server端IP或域名]:[Server端口]/项目/push的访问端点,客户端浏览器已经可以对WebSocket客户端API发起HTTP长连接了。
使用ServerEndpoint注释的类必须有一个公共的无参数构造函数,@onMessage注解的Java方法用于接收传入的WebSocket信息,这个信息可以是文本格式,也可以是二进制格式。
OnOpen在这个端点一个新的连接建立时被调用。参数提供了连接的另一端的更多细节。Session表明两个WebSocket端点对话连接的另一端,可以理解为类似HTTPSession的概念。
OnClose在连接被终止时调用。参数closeReason可封装更多细节,如为什么一个WebSocket连接关闭。
更高级的定制如@Message注释,MaxMessageSize属性可以被用来定义消息字节最大限制,如果超过6个字节的信息被接收,就报告错误和连接关闭。
五、小结
Socket在应用程序间通信被广泛使用,如果需要兼容低版本的浏览器,建议使用反向ajax或长链接实现;如果纯移动端或不需考虑非现代浏览器则可以直接使用websocket。Flash实现推送消息的方法不建议使用,因为依赖插件且手机端支持不好。关于反向ajax也有一些封装好的插件如“Pushlet”。
à参考资料如下,文章版权信息归原作者所有,转载请注明出处:
WebSocket与消息推送
http://www.cnblogs.com/best/archive/2016/09/12/5695570.html
UDP协议
https://baike.baidu.com/item/UDP/571511?fr=aladdin
TCP/IP协议
https://baike.baidu.com/item/TCP%2FIP%E5%8D%8F%E8%AE%AE/212915?fr=aladdin&fromid=214077&fromtitle=tcp%2Fip
相关推荐
如何使用Postman来发送数据到后端Spring Boot应用程序,并使用WebSocket建立实时通信通道,以便后端应用程序可以向Postman推送消息。 学会这个方法,就能缩短你的项目开发周期,以及提高你的开发效率。如果提出您的...
概要:本文介绍如何使用 Spring Boot 3.X 和 WebSocket 实现消息推送,并动态开启、关闭和取消定时任务。通过WebSocket实现实时通信,结合定时任务管理,可实现灵活的消息推送和任务控制。 使用人群:适合有Spring ...
spring boot websocket例子,实现socket连接,关闭,发送消息功能,运行Application.java运行项目,访问地址http://localhost:8080/socket.html
NULL 博文链接:https://412887952-qq-com.iteye.com/blog/2295146
使用spring boot+websocket实现一个websocket连接,使用IDEA打开项目,运行Application.java运行后台,然后打开localhost:8080打开前端即可测试
一、前言 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455...spring boot2.x整合websocket服务端; websocket客户端java代码版; websocket客户端HTML网页版。
spring boot+websocket网页上使用的是jquery写的,网页放在resources\static目录里边,下载直接运行就可以
Spring Boot WebSocket.pptx Spring Boot Web篇 (上) pptx Spring Boot Web篇(下) .pptx Spring Boot Web篇 (中) pptx Spring Boot 安全.pptx Spring Boot 数据库JDBCpptx Spring Boot 日志pptx Spring Boot 测试...
一个基于Spring Boot + WebSocket + Redis,可快速开发的分布式即时通讯群聊系统。适用于直播间聊天、游戏内聊天、客服聊天等临时性群聊场景。 Java开发基于SpringBoot+WebSocket+Redis分布式即时通讯群聊系统。一...
内容概要:帮助读者通过 Spring Boot 框架一步步完成 WebSocket 集成,快速上手WebSocket。在通过两种方式集成的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期...
[课堂课件讲解]Java微服务实践-Spring Boot WebSocket.pptx
此资源为websocket的页面源码,配合Spring boot 2基于Netty的高性能Websocket服务器(心跳模式) 文章来使用
vue前端后端分离spring boot 2.0集成websocket,带身份认证实现消息推送功能
STOMP protocol via WebSocket for Android Overview This library provide support for STOMP protocol https://stomp.github.io/ At now library works only as client for backend with support STOMP, such as ...
spring-boot-websocket-client 代码示例
WebSocket:WebSocket Spring Boot项目
Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送
Spring Boot整合websocket实现群聊,音频发送,点对点聊天,图片发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送 ...
如何使用Postman来发送数据到后端Spring Boot应用程序,并使用WebSocket建立实时通信通道,以便后端应用程序可以向Postman推送消息,并可动态开启、关闭和取消定时任务。 学会这个方法,就能缩短你的项目开发周期,...
Spring Boot WebSocket聊天应用程序您可以在签出应用程序的实时版本。要求Java-1.8.x Maven-3.xx设定步骤1.克隆应用程序git clone https://github.com/callicoder/spring-boot-websocket-chat-demo.git 2.使用maven...