Spring WebSocket Ping/Pong

为什么spring的WebSocket包中的WebSocketHandler只有handlePongMessage,却没有handlePingMessage函数呢,而且我在客户端发送了一个ping的数据帧,服务端也会执行handlePongMessage函数?

1

3个回答

客户端发送来的ping,spring是自动回复pong
当然,也可以spirng 发送ping,客户端可以处理返回pong,这时候handlePongMessage就可以看到了

0
zqs164
zqs164 我原本是打算在ping消息中做一些处理,结果发现ping消息直接被tomcat服务器处理了,压根没有进应用,现在还是用服务器ping客户端在handlePongMessage中做处理了。
一年多之前 回复

5.5.2. Ping

The Ping frame contains an opcode of 0x9.

A Ping frame MAY include "Application data".
// 注:Ping帧中可能会携带数据

Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in
response, unless it already received a Close frame. It SHOULD
respond with Pong frame as soon as is practical. Pong frames are
discussed in Section 5.5.3.
// 注:在收到Ping帧后,端点必须发送Pong帧响应,除非已经收到了Close帧。在实际中应尽可能快的响应。

An endpoint MAY send a Ping frame any time after the connection is
established and before the connection is closed.

NOTE: A Ping frame may serve either as a keepalive or as a means to
verify that the remote endpoint is still responsive.

5.5.3. Pong

The Pong frame contains an opcode of 0xA.

Section 5.5.2 details requirements that apply to both Ping and Pong
frames.

A Pong frame sent in response to a Ping frame must have identical
"Application data" as found in the message body of the Ping frame
being replied to.
// 注:在响应Ping帧的的Pong帧中,必须携和被响应的Ping帧中相同的数据。

If an endpoint receives a Ping frame and has not yet sent Pong
frame(s) in response to previous Ping frame(s), the endpoint MAY
elect to send a Pong frame for only the most recently processed Ping
frame.

websocket协议规定,endpoint主动去ping另一个endpoint,然后另一个endpoint进行pong的响应。ping中可能带有数据,响应的pong必须携带相应的数据。
所以有处理pong的handlePongMessage接口,没有处理ping的接口

0
zqs164
zqs164 我的服务端用spring,而spring中没有处理ping消息的函数,那意思就是,我只能服务端主动去ping客户端,然后客户端回应pong消息?这样不是加重了服务端的压力?
一年多之前 回复
-1
zqs164
zqs164
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
使用Websocket实现消息推送(心跳)
本来以为写完了,结果最近和一个同事在讨论心跳的事情,这里再做一个补充。先说我的结论: WebSocket协议已经设计了心跳,这个功能可以到达检测链接是否可用 心跳是用来检测链接是否可用的,不一定支持携带数据,可要看具体实现 如果非要心跳中带上复杂数据,那这个可作为应用层的一个功能自己去实现
项目用到的Socket通讯ping pong流程图
项目用到的Socket通讯ping pong流程图昨天看了在项目中使用的Socket通讯,项目中使用Client和Server都有一个心跳的线程,这个线程主要是为了检测Client和Server是否正常链接,Client和Server是否正常链接主要是用ping pong流程来保证的,ping pong流程图如下图所示:
okhttp之旅(十四)--websocket连接的保活
系统学习详见OKhttp源码解析详解系列 连接的保活通过 PING 帧和 PONG 帧来实现。 1 周期性的向服务器发送 PING 帧 okhttp之旅(十二)--websocket的使用及建立连接 中2.4.4 第四步是初始化 Reader 和 Writer时开启线程周期性发送 PING 帧 public final class RealWebSocke...
Java for Web学习笔记(七二):Service和Repository(7)在Spring框架中使用WebSocket
在WebSocket中注入spring bean 和Listener一样,websocket不属于spring framework,不是spring framework天然的bean,因此无法在里面直接注入spring的bean。 SpringCongifurator 为了让websocket更好地在Spring framework中工作,WebSocket Endpoint的配置器将继承S
利用Jmeter对WebSocket进行压力测试
什么是WebSocket 是一种协议(具体查看参考文档,或者官方文档),在http中服务器只能在接收到请求后,才能给客户端返回respone,在一些服务端需要主动发送数据的需求时,http的实现效果不是很好。而WebSocket能很好的解决这个问题,在建立连接后,服务端和客户端可以随意的来回发送数据,整个通信类似打电话:建立连接(拨通)->通信->关闭连接(挂断)。 如何识别性能测试的...
gin框架中结合gorilla实现webSocket
gin框架写rest接口特别6,性能也很好。 本文介绍一下gin和gorilla结合创建websocket 1. gin github地址:https://github.com/gin-gonic/gin 安装gin的代码包 go get github.com/gin-gonic/gin package main import ( "github.com/...
WebSocket服务器端与客户端交互
webSocket服务器端怎么确定客户端接收到服务器端发送的消息,即消息可靠性:   而解决方案,就是让服务器和客户端能够发送 Ping/Pong Frame(RFC 6455 - The WebSocket Protocol)。这种 Frame 是一种特殊的数据包,它只包含一些元数据而不需要真正的 Data Payload,可以在不影响 Application 的情况下维持住中间网络的...
jmeter websocket lib 20190418最新版,支持多种websocket sampler
支持多种websocket sampler: WebSocket Close WebSocket Open Connection WebSocket Ping/Pong WebSocket Single Read Sampler WebSocket Single Write Sampler WebSocket request-response Sampler
服务器推送技术--spring websocket + 心跳保活重连 简易聊天室demo(二)
上一篇文章简单说了spring websocket搭建简易聊天室demo的过程,spring的文档比较详细因此过程比较顺利.这篇文章主要记录一下对心跳保活和断线重连的一点思考和尝试,不保证观点的正确性,如有发现错误,希望能留言指教。具体代码实现见 index.js重连一般断线时都会触发websocket的onclose方法,因此,只需在此方法中重新发起一个websocket连接即可 w
Spring Boot通信之STOMP协议:后台不发送心跳的问题
当我们使用SockJS去链接后台服务器时:可会收到CONNECTED帧(连接成功返回的帧)中的:心跳是0,0。这样的话,客户端每10秒都会向服务器发送一个心跳帧,但是服务器不会向客户端发送心跳,因为服务器配置的是0,0。表示不发送心跳。我们可以在Network选项卡(按F12打开Chrome浏览器)中的帧看到:客户端会发送心跳帧,而不会收到心跳帧。解决方法:在Spring Boot中的配置文件中设...
一个简单的pingpong程序测试mpi消息通讯的开销及并行计算通讯启动时间测算
一个简单的pingpong程序测试mpi消息通讯的开销 随着科技的进步,集群单节点计算能力的提高,似乎通讯开销成了并行计算中dominant,再提高计算能力对于并行的增益似乎效果不明显,限制性能的瓶颈从处理器计算能力上转移到通讯开销上。显然,此时设法降低MPI消息通讯带来的时间消耗,成为了当务之急。 因此,写了一个极其简单的pingpong并行程序来测试消息通讯带来的开销。 基本思想 所谓的pin...
websocket两个实例,包括基于java的以及集成在SpringBoot中的
学习总结关于websocket内容,包括基于java的实现以及基于Spring boot集成实现
spring websocket 项目搭建以及请求的基本过程
浏览器客户端和服务器建立起websocket的链接,最初也是http请求握手,通过httpServletRequest发送http请求到服务器,其中头部就包含需要请求websocket链接的一系列信息,大概过程如下1.客户端请求一个链接,头部中包含如下信息GET /demo HTTP/1.1 Host: example.com Connection: Upgrade Sec-WebSocket
Ping pong (树状数组)
N(3<=N<=20000) ping pong players live along a west-east street(consider the street as a line segment). Each player has a unique skill rank. To improve their skill rank, they often compete with e...
fpga开发的一些技巧,包括fifo、pingpong等
fpga开发的一些例子以及技巧,包括时钟、复位、fifo、pingpong操作等
LoRa开发7:PingPong系统
设计一个有趣的PingPong系统,更好地理解LoRa终端的收发逻辑。
如何打好pingpong(eclipse连接linux虚拟机上的redis出现的各种问题解决方案)
1、环境   我使用的是vm搭载的CentOs6.10,win7,redis4.0.8 2、代码 这是我使用的测试代码 package Jdis; import redis.clients.jedis.Jedis; public class RedisTest { public static void main(String[] args) { Jedis...
WebSocket的Frame协议解析
原文链接:https://www.dubby.cn/detail.html?id=9105 先给出WebSocket Frame的协议: image 复制抓包抓到的数据: 81 85 30 6c e2 9a 54 19 80 f8 49 字段分析: 81 85 30 6c e2 9a 54 19 80 f8 49 10000001 100...
netty实现长连接心跳检
阅读本文前,你必须了解netty相关的一些基础知识,了解怎么使用netty创建服务器端及客户端,了解一些编解码技术来避免粘包拆包问题,推荐李林锋的《netty权威指南》。 主要逻辑: 使用netty实现长连接,主要靠心跳来维持服务器端及客户端连接。 实现的逻辑主要是: 服务器端方面: 1, 服务器在网络空闲操作一定时间后,服务端失败心跳计数器加1。 2, 如果收到客户端的p...
MAC下Jmeter 配置安装websocket 取样器
MAC 下Jmeter安装&打开 方式一: 1. brew install jmeter --with-plugins 2. open /usr/local/bin/jmeter 方式二: 1. 官网下载压缩包,解压即可用http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.tgz 2. cd apache-j...
SpringBoot + WebSocket实现简单消息推送
WebSocket是一种双工通信的网络协议,所谓双工就是浏览器可以给服务器发送消息,服务器也可以向浏览器发送消息,那么,有了HTTP协议,为什么还要使用它呢?假设我们需要每天定时需要服务器给客户端推送消息,那么HTTP协议就做不到主动的发送信息给客户端,而WebSocket则可以实现这一功能,它会自动监控浏览器并且做出自动回复。 WebSocket的特点: (1)建立在 TCP 协议之上,服务...
Python开发系列课程(16) - 进程和线程
进程和线程 今天我们使用的计算机早已进入多CPU或多核时代,而我们使用的操作系统都是支持“多任务”的操作系统,这使得我们可以同时运行多个程序,也可以将一个程序分解为若干个相对独立的子任务,让多个子任务并发的执行,从而缩短程序的执行时间,同时也让用户获得更好的体验。因此在当下不管是用什么编程语言进行开发,实现让程序同时执行多个任务也就是常说的“并发编程”,应该是程序员必备技能之一。为此,我们需要先...
在Spring Boot框架下使用WebSocket实现消息推送
Spring Boot的学习持续进行中。前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目(使用Spring Boot开发Web项目)以及怎样为我们的Project添加HTTPS的支持(使用Spring Boot开发Web项目(二)之添加HTTPS支持),在这两篇文章的基础上,我们今天来看看如何在Spring Boot中使用WebSocket。 什么是WebSocket
pingpong操作
目前项目中所用的乒乓操作算法,已经进行了验证,证明其是可以正常进行运行的。请放心下载。
socket实现ping功能
#include <winsock2.h> #include <iostream> #include <windows.h> using namespace std;#define DATA_SIZE 32 #define RECV_MAX_SZIE 1024 #pragma comment(lib, "ws2_32.lib")typedef struct tag_icmphdr //ic
Ping pong HDU - 2492(一维树状数组 从前扫再从后扫)
N(3&amp;lt;=N&amp;lt;=20000) ping pong players live along a west-east street(consider the street as a line segment).  Each player has a unique skill rank. To improve their skill rank, they often compete with ...
第18章 使用WebSocket和 STOMP实现消息功能
概述: 浏览器和服务器之间发送消息在SpringMVC控制器中处理消息为目标用户发送消息 为了解决应用为web应用之间的通信 Spring4.0 为 WebSocket通信提供了支持 包括: 发送和接收消息的低层级API;发送和接收消息的高级API;用来发送消息的模板;支持SockJS,用来解决浏览器端、服务器以及代理不支持WebSocket的问题。 1、使用
Ping pong
DescriptionnnN(3<=N<=20000) ping pong players live along a west-east street(consider the street as a line segment). Each player has a unique skill rank. To improve their skill rank, they often compete with each other. If two players want to compete, they must choose a referee among other ping pong players and hold the game in the referee's house. For some reason, the contestants can't choose a referee whose skill rank is higher or lower than both of theirs. The contestants have to walk to the referee's house, and because they are lazy, they want to make their total walking distance no more than the distance between their houses. Of course all players live in different houses and the position of their houses are all different. If the referee or any of the two contestants is different, we call two games different. Now is the problem: how many different games can be held in this ping pong street?nInputnnThe first line of the input contains an integer T(1<=T<=20), indicating the number of test cases, followed by T lines each of which describes a test case. nEvery test case consists of N + 1 integers. The first integer is N, the number of players. Then N distinct integers a1, a2 ... aN follow, indicating the skill rank of each player, in the order of west to east. (1 <= ai <= 100000, i = 1 ... N).nOutputnnFor each test case, output a single line contains an integer, the total number of different games. nSample Inputnn1 n3 1 2 3nSample Outputnn1
java多线程--run方法和start方法的区别
/*创建一个线程 Thread t1 = new Thread(); t1.run(); 只是调用了一个普通方法,并没有启动另一个线程,程序还是会按照顺序执行相应的代码。 t1.start(); 则表示,重新开启一个线程,不必等待其他线程运行完,只要得到cup就可以运行该线程。*/ package puzzle; public class test { public static vo...
spring boot中使用web socket显示实时消息
一、在spring boot中使用web socket进行实时消息显示 二、pom.xml中的依赖 &amp;lt;!-- spring boot 中web socket服务依赖 --&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;g...
hdu 2492 Ping pong (树状数组,基础题,水题)
 树状数组中的c[i]表示技能值为i的人有c[i]个 b[i]表示在第i个人前面,比第i个人的技能值低的人有b[i]个 d[i]表示在第i个人后面,比第i个人的技能值低的人有d[i]个 #include &amp;lt;cstdio&amp;gt; #include &amp;lt;cstdlib&amp;gt; #include &amp;lt;vector&amp;gt; #include &amp;lt;queue&amp;gt; #includ...
Socket.IO连接异常时的内置事件流程图
参考Soket.IO官方文档:https://socket.io/docs/client-api/,客户端内置事件一共有10种,测试代码如下: socket.on('connect', function(data){ onlineFlag = true; console.log(data + ' - connect'); }); socket.on('connect_error'
用okhttp实现webSocket长连接
用okhttp实现webSocket长连接,可以接收服务端消息,向服务端发送消息
semtech驱动源码SX12xxDrivers-2.0.0
semtech驱动源码SX12xxDrivers-2.0.0,PING,PONG收发测试,可直接进行测试
一:ActiveMQ简介
一、 JMS简介 全称:Java Message Service 中文:Java消息服务。 JMS是Java的一套API标准。 1.什么是消息: “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的...
从零开始学习比特币开发(九)--P2P 网络建立之消息处理中篇
恭喜你越来越接近比特币的核心了,在中上篇,我们主要讲解了比特币的消息处理线程,接下来,在下篇中,将以具体的比特币消息即比特币协义分析为主。针对比特币的协义,为了从逻辑上进行理解,我们并没有完全按照代码的顺序,而是按照某个具体的消息的 请求----响应 模式来进行分析。 P2P 网络的建立是在系统启动的第 12 步,最后时刻调用 CConnman::Start 方法开始的。 下面我们来看比特币协义相...
实例学习ansible系列(7)常用模块之ping/setup
知识点:ping模块,用于确认和对象机器之间是否能够ping通,正常情况会返回pong 知识点:setup模块,用于收集对象机器的基本设定信息。
tomcat websocket 并发问题解决
https://my.oschina.net/HY1024/blog/1620337#comment-list   https://my.oschina.net/HY1024/blog/1623517#comment-list     https://my.oschina.net/HY1024/blog/1624382   https://my.oschina.net/HY1024...
redis 实例化以及ping 的操作
一旦开启一个不关闭的脚本  就需要一个ping函数去不断的校验的链接   下面的redis类经过简单的封装  ; ping 函数由于历史原因并没有封装到 Redis类里面    class Redis { protected $handler; protected $options = [ 'persistent' =&amp;gt; false, ...
android 使用Okhttp3实现 websocket 连接并实现通信
呃那个,最近公司项目又用到了websocket,呃,其实,这个东西我也不是很懂,目前也是从网上学习和抄写了,不过,也是自己整理了一下,不能算抄袭,自我觉得,顶多算是借鉴,哈哈,自我安慰的一种体现哈,下面,我直接上正题,不啰嗦1、首先,我们要想将okhttp3引进项目中取,你可以从网上找jar包引入,呃,这里不提供,我这里提供从android studio 里面的buile.gradle里面,Ecl...