WebSocket服务器端与客户端交互

webSocket服务器端怎么确定客户端接收到服务器端发送的消息,即消息可靠性:
 
而解决方案,就是让服务器和客户端能够发送 Ping/Pong Frame( RFC 6455 - The WebSocket Protocol )。这种 Frame 是一种特殊的数据包,它只包含一些元数据而不需要真正的 Data Payload,可以在不影响 Application 的情况下维持住中间网络的连接状态。
 
Ping和Pong是websocket里的心跳,用来保证客户端是在线的,一般来说只有服务端给客户端发送Ping,然后客户端发送Pong来回应,表明自己仍然在线。
 
 
Websocket是一个全新的、独立的协议,基于TCP协议,与http协议兼容、却不会融入http协议,仅仅作为html5的一部,与http协议不同的请求/响应模式不同,Websocket在建立连接之前有一个Handshake(Opening Handshake)过程,在关闭连接前也有一个Handshake(Closing Handshake)过程,建立连接之后,双方即可双向通信。
 
WebSocket:数据传输, 客户端和服务器连接成功后,就可以进行通信了,通信协议格式是WebSocket格式,服务器端采用Tcp Socket方式接收数据,进行解析
Websocket协议通过序列化的数据帧传输数据。数据封包协议中定义了opcode、payload length、Payload data等字段。其中要求:
  1. 客户端向服务器传输的数据帧必须进行掩码处理:服务器若接收到未经过掩码处理的数据帧,则必须主动关闭连接。
  2. 服务器向客户端传输的数据帧一定不能进行掩码处理。客户端若接收到经过掩码处理的数据帧,则必须主动关闭连接。
针对上情况,发现错误的一方可向对方发送close帧(状态码是1002,表示协议错误),以关闭连接。
 
WebSocket的RFC标准是不会产生粘包、半包问题的
 
WebSocket与TCP、HTTP的关系
WebSocket与http协议一样都是基于TCP的,所以他们都是可靠的协议,Web开发者调用的WebSocket的send函数在browser的实现中最终都是通过TCP的系统接口进行传输的。
WebSocket和Http协议一样都属于应用层的协议,那么他们之间有没有什么关系呢?答案是肯定的,WebSocket在建立握手连接时,数据是通过http协议传输的,但是在建立连接之后,真正的数据传输阶段是不需要http协议参与的。
 
 
 
 
 
1这个操作码(Opcode)来传输文本的。没错,1这个操作码就是传输文本(UTF-8)的。在分片过程中把操作码设置为0,0也只是分片时用的。操作码是4位的,取值当然不止这两个,除了指定传输数据类型外还有其它用途的操作码。
   规范文档中也提供了一个表格
 
opcode
Meaning
描述
Reference
0XXXXXXX
数据帧
字节的最高位bit为0
 
0
Continuation Frame
 
RFC 6455
1
Text Frame
文本(UTF-8)数据
RFC 6455
2
Binary Frame
二进制数据
RFC 6455
3-7
 
保留
 
1XXXXXXX
控制帧
字节的最高位bit为1
 
8
Connection Close Frame
服务器向客户端请求结束当前连接
RFC 6455
9
Ping Frame
服务器向客户端发送一个Ping帧
RFC 6455
10
Pong Frame
客户端返回给服务器端一个Pong帧
RFC 6455
11-15
 
保留
 

猜你喜欢

转载自wangshupei123-163-com.iteye.com/blog/2406591