WebSocket聊天室业务场景分析

1. 需求描述

假设需要建立一个Web聊天室,可以理解为QQ的Web版本。首先考虑最简单的需求,即实现用户A和用户B之间的聊天。而实现的技术采用WebSocket。业务场景如下图所示。
在这里插入图片描述

2. 场景分析

上图中,要实现用户A浏览器和用户B浏览器对话,首先需要用户A浏览器与WebSocket服务器建立连接,同时,B浏览器也与WebSocket服务器建立连接。在A、B同时都建立连接后,双方就可以进行正常的对话。

2.1 用户A浏览器发送消息给用户B浏览器

在建立连接完成后,用户A浏览器向用户B浏览器发送消息 Hello B ,消息首先达到WebSocket服务器,经过WebSocket服务器转发给用户B浏览器。

2.2 用户B浏览器发送消息给用户A浏览器

在建立连接完成后,用户B浏览器向用户A浏览器发送消息 Hello A,消息首先到达WebSocket服务器,经过WebSocket服务器转发给用户A浏览器。

2.3 用户A、用户B在某一个共同的群C,群发消息

此处,以用户A为例,用户A在群C 群发消息,为了简单起见,假设群里有10个用户,均在线。用户A群发消息,C 群的小伙伴,大家好啊 ,该消息首先会达到WebSocket服务器,经服务器转发给该群的各个用户。

2.4 用户A浏览器在线,用户B浏览器不在线

该场景也比较常见,用户A发送的消息,首先到达WebSocket服务器,WebSocket把消息放入消息队列缓存起来,设置一个消息的有效时间,在该有效时间内,用户B浏览器如果上线,WebSocket服务器把该消息转发给用户浏览器B,否则,设置消息发送失败,给用户A浏览器一个反馈消息。

3. WebSocket的关键点

WebSocket的关键点主要有两个方面,一方面是连接的建立,另一方面是数据的传输。
下图中,WebSocket的整个生命周期阶段大致分为以下几步:
(1)WebSocket服务器启动WebSocket服务。
(2)WebSocket客户端发送一个Http的升级协议请求(ws:host:port/xx),WebSocket服务器监听到请求后,允许升级,此时,WebSocket连接建立成功。
(3)此后,WebSocket客户端可以主动的给WebSocket服务端发送消息;重要的是,WebSocket服务端也可以主动的给WebSocket客户端发送消息。
(4)当WebSocket客户端或WebSocket服务端一方需要退出连接的时候,都可以主动的关闭连接。

以上的过程,就是WebSocket生命周期的主要阶段。
在这里插入图片描述

4. WebSocket和Socket有什么关系

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
WebSocket 是独立的、创建在 TCP 上的协议。
Websocket 通过HTTP/1.1 协议的101状态码进行握手。
为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。

套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。
套接字(Socket)主要分为三种类型:
1.流套接字(SOCK_STREAM) 流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The
Transmission Control Protocol)协议。
2.数据报套接字(SOCK_DGRAM) 数据报套接字提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(
User
DatagramProtocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
3.原始套接字(SOCK_RAW) 原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接。

WebSocket和Socket区别

可以把WebSocket想象成HTTP(应用层),HTTP和Socket什么关系,WebSocket和Socket就是什么关系。

HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。

WebSocket 协议
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种

从以上的引用摘录可以看出WebSocket和Socket没有什么关系,但如果硬要找关系的话,也是有关系的,下图所示,WebSocket和Socket有相似的生命周期,都是先建立连接,然后发送数据,最后关闭连接。并且,WebSocket是基于TCP的上层协议,而Socket也有TCP的实现(但TCP实现不是Socket的唯一实现)。
在这里插入图片描述

5. 结语

有一句话说的好,好记性不如烂笔头。之前学习的很多东西,学的时候,觉得听的挺明白的,当时感觉自己懂了,但没有用自己的话表述出来,也缺少了总结归纳整理。随着时间的流逝,当时的记忆逐渐模糊,直到后面一点不剩,现在整理笔记加上自己的资料扩展,意在建立自己的认知体系。后续回顾重温的时候,会有迹可循。不至于若有所失。

6. 参考资源

网络视频课程(收费版)
百度百科
Http、Socket、WebSocket之间联系与区别

猜你喜欢

转载自blog.csdn.net/fanjianglin/article/details/113097161