什么是即时通信/通讯
理解:同一时刻,双方都能够主动给对方发送消息!基于互联网的即时交流消息的业务!
浏览器 和 web服务器 之间 是不是即时通信呢?!
答: 不是!!原因是,浏览器主动发送请求,服务器被动响应!!
问题来了:假如我们发头条工程(flask工程)中, A用户关注了B用户!我们后台这边需要主动把"A关注了B"的这件事通知给B!
使用fask能不能实现中个通知?!
答:我们的flask web工程无法将该消息发送给B用户(客户端)的!
头条项目中的推送实现
- 1、使用在线推送模式
- 2、自己搭建一个即时通讯服务器
- 3、要求客户端登陆连接即时通信服务器
自己搭建一个即时通信服务器,主动推送消息给客户端
“协议”含义:约定双方(客户端和服务端)如何进行通信!
HTTP协议描述的一种通信方式:客户端(浏览器)主动发送消息给服务器,服务器被动响应消息给客户端!——这种通信方式不是即时通信!
WebSocket协议——该协议一种描述了即时通信的通信方式!客户端可以主动发消息给服务端,服务端也可以主动发消息给客户端!
WebSocket协议
如果一个工具/模块,是基于WebSocket协议实现的,那么代码就需要实现浏览器和服务器只需要完成一次握手(不是指建立TCP连接的那个三次握手,是指在建立TCP连接后传输一次握手数据),两者之间就直接可以创建持久性的连接,并进行双向数据传输。
根据HTTP协议,实现一个Nginx
根据WebSocket协议,实现一个即时通信服务器
我们并不会去自己实现WebSocket协议,而是找一个工具socketio,使用该工具模块可以快速搭建出一个即时通信服务器;socketio就是WebSocket协议的一个具体的代码实现!
使用socketio工具,实现一个即时通信服务器
socketio是一个基于WebSocket协议实现的一个即时通讯服务器框架;用该框架可以快速开发出一个即时通信服务器!
优点:1、双向即时通信;2、有python库点实现
缺点:通用性不好,使用socketio构建的即时通讯服务器,就必须使用socketio构建即时通讯客户端!