(websocket)协议中Ping Pong,Socket通讯ping pong(长连接)

- websocket协议,长连接;Http短连接
WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。
 WebSocket复用了HTTP的握手通道。具体指的是,客户端通过HTTP请求与WebSocket服务端协商升级协议。协议升级完成后,后续的数据交换则遵照WebSocket的协议。

 websocket协议是基于tcp的网络协议,实现了浏览器与客户端的全双工通信,与http协议不同的是,它允许服务器主动推送消息给客户端。
 websocket协议分为两部分,一是握手建立连接;二是数据传输。
 建立连接:websocket的连接建立是基于http协议的。数据传输:websocket协议中数据是通过一系列的帧来传输。出于安全性考虑,所有客户端发往服务器的数据帧需要掩码,若服务器收到未掩码的数据帧将会主动断开连接;所有服务器发往客户端的数据帧不能掩码,若客户端收到掩码的数据帧将会主断开连接。

- (websocket)协议中Ping Pong,长连接

  WebSocket为了保持客户端、服务端的实时双向通信,需要确保客户端、服务端之间的TCP通道保持连接没有断开。然而,对于长时间没有数据往来的连接,如果依旧长时间保持着,可能会浪费包括的连接资源。但不排除有些场景,客户端、服务端虽然长时间没有数据往来,但仍需要保持连接。这个时候,可以采用心跳来实现。
  发送方->接收方:ping;
  接收方->发送方:pong;
  ping、pong的操作,对应的是WebSocket的两个控制帧,opcode分别是0x9、0xA。

  websocket ping pong:目前的话,浏览器中没有相关api发送ping给服务器,只能由服务器发ping给浏览器,浏览器返回pong消息;

  WebSocket控制帧有3种:Close(关闭帧)、Ping以及Pong。控制帧的操作码定义了0x08(关闭帧)、0x09(Ping帧)、0x0A(Pong帧)。Close关闭帧很容易理解,客户端如果接受到了就关闭连接,客户端也可以发送关闭帧给服务端。Ping和Pong是websocket里的心跳,用来保证客户端是在线的,一般来说只有服务端给客户端发送Ping,然后客户端发送Pong来回应,表明自己仍然在线。

WebSocket协议深入探究-https://www.sohu.com/a/227600866_472869
OPCODE:4位 , 解释PayloadData,如果接收到未知的opcode,接收端必须关闭连接。
0x0表示附加数据帧
0x1表示文本数据帧
0x2表示二进制数据帧
0x3-7暂时无定义,为以后的非控制帧保留
0x8表示连接关闭
0x9表示ping
0xA表示pong
0xB-F暂时无定义,为以后的控制帧保留

- WebSocket分包,粘包,连包,半包
  网上很多资料都说WebSocket不会粘包,半包。OK,这是正确的,因为上述将数据帧的时候我们已经看到WebSocket会将大的数据,自动分片发送。所以WebSocket会自动分包发送,因为这种分包发送,WebSocket的数据不会溢出接收缓冲区,所以也不会有半包的情况发送。
  但是关于粘包,和连包,我看到一部分资料都说不会。因为WebSocket具有帧头信息,所以不会粘包?这是不完全正确的,要知道Tcp的报文也是具有包头信息的,只不过Socket已经处理了。而且经过我对我们项目服务器实际压力测试,发现WebSocket会粘包,连包。不同的是,WebSocket的数据中拥有包头信息,但Tcp没有(实际开发中,我们自己一定会加个包头来分割封包的,WebSocket只是替我们设计了一个包头而已),但对这个包头分割的处理,还是要我们自己完成,WebSocket不会代劳,如果我们自己不处理,抱歉,妥妥的粘包,连包

Websocket协议原理与实现(一)- https://www.jianshu.com/p/1ee01218097b
A barebones WebSocket client and server implementation written in 100% Java- https://github.com/TooTallNate/Java-WebSocket
WebSocket协议详解及应用- https://blog.csdn.net/u014520745/article/details/52639452
WebSocket的ping与pong的java实现- https://blog.csdn.net/u010770993/article/details/70312279

- Socket通讯ping pong
  做一个socket网络传输的项目,在使用TCP进行传输的时候,接收端有时候会因为写入到文件的时间而造成一定的延时,所以在接收端使用了ping-pong buffer的策略进行优化。

 ping-pong机制- https://blog.csdn.net/chenyu201003/article/details/81449762
 项目用到的Socket通讯ping pong流程图- https://blog.csdn.net/hufei20082008/article/details/53513918?utm_source=blogxgwz2
 Socket默认是长链接,为了知道Client和Server链接是否正常,项目中使用的ClientSocket和ServerSocket都有一个心跳的线程,这个线程主要是为了检测Client和Server是否正常链接,Client和Server是否正常链接主要是用ping pong流程来保证的.

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/85246287