WebSocket是Html5里面的一个东西。

WebSocket有别于从前的Http协议,http是无状态的。请求了一次服务器,下一次请求连自己都不知道自己上一次请求了什么内容,

然而,webSocket是长连接,只要进行一次连接,即可服务器和客户端进行双向通信,可以服务器向客户端推送信息。以前还没有websocket这个技术的时候是

通过ajax轮询来完成操作的。但是,隔一段时间就去问服务器,这样对服务器的压力是可想而知的。websocket就没有这样的问题。可以十分方便的实现长连接,

而且开销还不大。

注意,websocket是一个底层协议,可以理解为跟http是一个级别的。 STOMP则是基于websocket的上层协议。

还有一点需要注意的是,客户端浏览器有的还不支持websocket,此时可以用Sockjs来作为Websocket的备选方案。

sockjs一样可以作为STOMP的客户端。

那么现在来看Springboot环境下的代码。

代码摘自官网demo

  1. package hello;

  2. import org.springframework.context.annotation.Configuration;

  3. import org.springframework.messaging.simp.config.MessageBrokerRegistry;

  4. import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;

  5. import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;

  6. import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

  7. @Configuration

  8. @EnableWebSocketMessageBroker

  9. public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer

  10. {

  11. @Override

  12. public void configureMessageBroker(MessageBrokerRegistry config)

  13. {

  14. <span style="white-space:pre"> </span>//这行代码是配置中间人的 url 一会儿服务器会将产生的信息发送到这个地址,由订阅该地址的websocket客户端消费掉。<span style="white-space:pre"> </span>

  15. config.enableSimpleBroker( "/topic" );



  1. <span style="white-space:pre"> </span>//websocket客户端将要发送到websocket服务端的信息地址,个人觉得是为了区别于像其他servlet地址

  2. config.setApplicationDestinationPrefixes( "/app" );

  3. }

  4. @Override

  5. public void registerStompEndpoints(StompEndpointRegistry registry)

  6. {

  7. //这个方法是产生了一个endpoint,参数为websocket的客户端要对服务器端进行连接的地址

  8. registry.addEndpoint( "/gs-guide-websocket" ).withSockJS();

  9. }

  10. }

第一个java代码是启动WebSocket配置。不知读者朋友们是否写过tomcat下的websocket代码。

那会儿一个类实现了一个ServerApplicationConfig接口, 该接口位于 javax.websocket.server这个包下。

并且在tomcat容器启动时,寻找并注册开发者用@ServerEndPoint注解修饰的类

这里的代码也是一个意思

  1. package hello;

  2. import org.springframework.messaging.handler.annotation.MessageMapping;

  3. import org.springframework.messaging.handler.annotation.SendTo;

  4. import org.springframework.stereotype.Controller;

  5. @Controller

  6. public class GreetingController

  7. {

  1. <span style="white-space:pre"> </span>//这个地址也是让用户用户发送websocket客户端数据的地址 ,与上一个java代码 拼接起来 ,所有websocket客户端应该发送的地址是 -----> /app/hello

  2. @MessageMapping("/hello")

  1. <span style="white-space:pre"> </span>//这个地址是websocket服务器端要把服务器回送的消息发送的地址,消息内容会由订阅了这个地址的websocket客户端消费掉

  2. @SendTo("/topic/greetings")

  3. public Greeting greeting(HelloMessage message) throws Exception

  4. {

  5. System.out.println("欢迎得到调用........");

  6. System.out.println(message.getName());

  7. Thread.sleep( 1000 ); // simulated delay

  8. return new Greeting( "Hello, " + message.getName() + "!" );

  9. }

  10. }

  1. /**

  2. * 连接

  3. *

  4. * subscribe '/topic/greetings'

  5. */

  6. function connect()

  7. {

  8. var socket = new SockJS('/gs-guide-websocket');

  9. stompClient = Stomp.over(socket);

  10. stompClient.connect({}, function (frame)

  11. {

  12. setConnected(true);

  13. console.log('Connected: ' + frame);

  14. stompClient.subscribe('/topic/greetings', function (greeting)

  15. {

  16. showGreeting(JSON.parse(greeting.body).content);

  17. });

  18. });

  19. }

这段代码是用于进行websocket连接用的.

 var socket = new SockJS('/gs-guide-websocket');

这行代码里写的参数即为endpoint的地址。

  1. stompClient.subscribe('/topic/greetings', function (greeting)

  2. {

  3. showGreeting(JSON.parse(greeting.body).content);

  4. });

subscribe方法则是写的订阅的地址,订阅的地址一旦有了消息,就将其消费掉。得到信息后,在web浏览器内显示数据

  1. /**

  2. * 发送自己的信息

  3. */

  4. function sendName()

  5. {

  6. stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()}));

  7. }

send方法里的参数就是websocket要发送的地址,上面的java代码里已经有了说明.

完整的代码在Spring的官网上有。

http://spring.io/guides/gs/messaging-stomp-websocket/

Springboot下使用WebSocket和浏览器进行长连接通信相关推荐

  1. 记录一次微信小程序进行长连接通信使用emoji表情

    前言 起因是工作中微信小程序要做一个实时聊天功能并且可以发表情,在微信官方文档中其实是有emoji扩展组件的,用法也大概说明:自己看了一下文档. 之后自己理了理思路,摸索着自己写一个. 正文 Emoj ...

  2. qt websocket android,QT使用websocket进行长连接

    一般我们用的最多的就是http请求,但是频繁的请求可能对服务造成的压力很大,所以今天谈谈websocket长连接,一句话:简单 1.什么是长连接? A:一次请求连接,终身使用,就可以长久的保持信息的交 ...

  3. springboot框架下利用websocket实现即时通讯

    springboot框架下利用websocket实现即时通讯(文章末尾有git项目打包文件,直接下载使用即可) 用websocket实现简单的在线聊天,先画个时序图,直观感受下流程 SystemCon ...

  4. SpringBoot实现STOMP协议下的WebSocket

    文章目录 WebSocket简介 STOMP简介 上去就是干 环境配置 引入依赖 新建WebSocket配置类 新建保存用户认证信息的实体类MyPrincipalHandshakeHandler 握手 ...

  5. java/web/springboot项目使用WebSocket消息推送

    java/web/springboot项目使用WebSocket消息推送 最近项目中,有消息推送的广播和在线咨询的功能,以前也没搞过啊,有些小伙伴估计也是,那肯定要赶紧学习起来啊~ 不说废话,今天就告 ...

  6. 如何用苹果手机进行长截图,自带3种截屏方式,任你随意挑选

    每一款手机都各有优缺点.当我们将苹果手机与安卓手机进行对比的时候,就会发现,安卓手机很容易就能进行长截图,方式非常简单.而苹果手机的操作就相对麻烦一些,那么我们该如何解决苹果手机长截图这个问题呢? 1 ...

  7. 昆虫基因组DNA的优化提取,可进行长读测序

    昆虫基因组DNA的优化提取,可进行长读测序 通过 布伦达·奥珀特(Brenda Oppert) 1,*, 萨曼莎·斯托斯(Samantha Stoss) 1个, 阿莱莎和尚 1个 和 蒂莫西·史密斯 ...

  8. SpringBoot+Vue整合WebSocket实现前后端消息推送

    场景 WebSocket HTTP 协议是一种无状态的.无连接的.单向的应用层协议.它采用了请求/响应模型.通信请求只能由客户端发起,服务端对请求做出应答处理. 这种通信模型有一个弊端:HTTP 协议 ...

  9. Springboot中使用websocket发送信息给指定用户和群发

    websocket是一种长连接协议,相较于传统的http短连接,websocket不仅可以由客户端向服务器发送消息,可以主动向客户端发起信息,经常用于及时聊天,游戏和服务器向客户端推送信息. 主要优点 ...

最新文章

  1. SharePoint 客户端经常弹出Windows验证登录框问题
  2. 机器学习博士自曝:实验室「阉割」我的创造力,劝你别读!
  3. Java高并发编程:总线锁定和缓存一致性的问题
  4. Tree 1.5 For Net 2.0
  5. AppDelegate瘦身之服务化
  6. 使用 C1ReportDesigner 设计报表
  7. http://visualgo.net/ 数据结构可视化。。。。
  8. 活在当下本意是抑制欲望的无度
  9. centos www服务器文件unable create,Centos Vsftpd 无上传权限 (553 Could not create file)
  10. idea2020更新功能_idea2020 插件备份
  11. 三角测量计算三维坐标的代码_室内定位系统的三边测量与三角测量
  12. 中国大学MOOC 程序设计入门——C语言 翁凯 编程测试题汇总
  13. Japan games Android,Learn Japanese with Games
  14. PhotoShop 常用技巧记录
  15. ARP报文的存入条件和回复条件
  16. Win10删除右键多余选项菜单
  17. python协程多线程HTMLParser下载mp3
  18. 历数PC发展史上的祖先们
  19. .chm文件是啥,以及打开方法(我电脑win7)
  20. 电脑出现 initialization failure 问题

热门文章

  1. ROS入门-16.tf坐标系广播与监听的编程实现
  2. 西瓜书+实战+吴恩达机器学习(八)监督学习之朴素贝叶斯 Naive Bayes
  3. LeetCode刷题(35)--Permutation Sequence
  4. python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下
  5. linux查看虚拟化版本,4.15. 虚拟化 (机器翻译版本)
  6. c++频繁读取数据会丢失_异常堆栈信息丢失?到底是怎么回事?
  7. python图像直方图、获取每一个柱的个数_python数字图像处理实现直方图与均衡化...
  8. ppt里quicktime不可用_PPT插入音乐、视频的全部疑难问题,一站式帮你解决!
  9. 计算机代码如何求三角形面积,简单的程序来计算三角形的面积
  10. Echarts.js+jquery.js+china.js实现中国疫情地图