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里面,客户端进行一个监听,一旦后端有新订单,监听到有消息来了,就会相应操作,可以弹出框,播放音乐等等等等

websocket 实现消息实时推送

web服务器有很多种,比如有Apache,有Nginx等等, python 的web框架也有很多,所以要实现两者之间的通信,那么就需要规定要用某一种"方法"去进行通信,因此WSGI就是来规定如何通信,WSGI就是一种协议,就像说明书等等,规定两者之间怎么进行通信. mod_wsgi, uwsgi这些是中间件

web服务器和客户端之间就是http协议

二. ASGI的好处:

一. 实时消息通知机制:

应用场景: 比如别人评论我的文章. 或者别人给我发私信

实现方式:

  1. http轮询的方式, http是一种同步的通信机制,服务器压力相对大,发送了很多重复的报文
  2. websocket协议,建立持久可双向通信的连接, websocket是一种异步的通信机制

WSGI协议不支持websocket协议

ASGI协议支持websocket协议

二. C10K问题,单台服务器无法处理10000+个并发连接

后端web程序在处理一个请求的时候,常常会做如下的耗时操作:

  1. 查询数据库

  2. 发送邮件

  3. 请求第三方接口

  4. 做一些文件读写操作

异步思想:

查询数据库的时候,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