websocket 实现消息实时推送
websocket 实现消息实时推送
https://www.jb51.net/article/166411.htm
https://github.com/ops-coffee/demo/tree/master/websocket
https://channels.readthedocs.io/en/latest/
https://asgi.readthedocs.io/en/latest/implementations.html#django-channels
websocket是客户端和服务端之间的通信,所以它肯定有客户端和服务端,使用html5原生的websocket, 把websocket分为客户端和服务端,所以两个端都需要开发, 客户端是将代码写在js里面,客户端进行一个监听,一旦后端有新订单,监听到有消息来了,就会相应操作,可以弹出框,播放音乐等等等等
web服务器有很多种,比如有Apache,有Nginx等等, python 的web框架也有很多,所以要实现两者之间的通信,那么就需要规定要用某一种"方法"去进行通信,因此WSGI就是来规定如何通信,WSGI就是一种协议,就像说明书等等,规定两者之间怎么进行通信. mod_wsgi, uwsgi这些是中间件
web服务器和客户端之间就是http协议
二. ASGI的好处:
一. 实时消息通知机制:
应用场景: 比如别人评论我的文章. 或者别人给我发私信
实现方式:
- http轮询的方式, http是一种同步的通信机制,服务器压力相对大,发送了很多重复的报文
- websocket协议,建立持久可双向通信的连接, websocket是一种异步的通信机制
WSGI协议不支持websocket协议
ASGI协议支持websocket协议
二. C10K问题,单台服务器无法处理10000+个并发连接
后端web程序在处理一个请求的时候,常常会做如下的耗时操作:
-
查询数据库
-
发送邮件
-
请求第三方接口
-
做一些文件读写操作
异步思想:
查询数据库的时候,web程序去处理其他事情,但查询有结果的时候,通知web程序继续处理(回调)
Channels is comprised of several packages:
- Channels, the Django integration layer
- Daphne, the HTTP and Websocket termination server
- asgiref, the base ASGI library
- channels_redis, the Redis channel layer backend
ayer backend