websocket 实现消息实时推送

websocket 实现消息实时推送

websocket是客户端和服务端之间的通信,所以它肯定有客户端和服务端,使用html5原生的websocket, 把websocket分为客户端和服务端,所以两个端都需要开发, 客户端是将代码写在js里面,客户端进行一个监听,一旦后端有新订单,监听到有消息来了,就会相应操作,可以弹出框,播放音乐等等等等

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

经验分享 程序员 微信小程序 职场和发展