标签:效果图 适用于 对象 发送消息 active 在服务器 三方 用户登录 package
话不多说先上效果图演示
项目:http://112.74.164.107:9990/
1、安装组建
redis: yum install redis/apt install redis
2、创建虚拟化环境并进入
python3/python -m venv venv
source venv\bin\active
3、安装第三方库
pip install -r requirements.txt
4、初始化
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic
5、启动服务
gunicorn -w 5 -k gevent -b 0.0.0.0:9990 webchat.wsgi
6、访问
浏览器访问http://ip:9990
整个项目中涉及的思路和知识点我们在这里都一一分解为大家详细解说如下:
Django :一个可以使 Web 开发工作愉快并且高效的 Web 开发框架,能够以最小的代价构建和维护高质量的 Web 应用
框架:软件开发工程师从日常的重复劳动中总结出快速的、模块化的、安全的软件开发模式
Django 是 Python 开发者的最佳 Web 框架
Object Relation Mapping (关系对象映射)
开发者可为使用 Django 提供的 send_mail 函数发送邮件
使用方法
配置邮箱(setting.py)
发送
send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None, connection=None, html_message=None)
注: django 发送邮件封装 python smtplib 模块,smtplib 使用方 法: https://github.com/imsilence/packages/blob/master/python/mailclient.py
实现用户认证机制
是什么?
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议
为什么需要?
HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请
求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理
弊端: HTTP 协议无法实现服务器主动向客户端发起消息。
传统模式下, Web 应用程序通过频繁的 ajax 请求实现长轮询( 轮询是在 特定的时间间隔(如每1秒),由浏览器对服务器发出 HTTP 请求,然后由 服务器返回最新的数据给客户端的浏览器)
缺点:轮询的效率低,非常浪费带宽等资源(浏览器需要不断的向服务器
发出请求)
如何工作?
Web 浏览器和服务器都必须实现 WebSockets 协议来建立和维护连 接,由于 WebSockets 连接长期存在,与典型的 HTTP 连接不同,对 服务器有重要的影响(任何 WebSockets 服务器都需要实现为异步服 务器,基于多线程或多进程的服务器无法适用于 WebSockets,因为 它旨在打开连接,尽可能快地处理请求,然后关闭连接)
在 WebSocket 协议中, 浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
如何使用?
客户端 API (javascript)
1、创建 websocket 对象
var ws = new WebSocket(url, [protocol] );
2、属性
ws.readyState 表示连接状态
可选值:
0: 表示连接尚未建立。
1: 表示连接已建立,可以进行通信。
2: 表示连接正在进行关闭。
3: 表示连接已经关闭或者连接不能打开。
ws.bufferedAmount 表示已被 send() 方法放入正在队列中等待传输,但是还没有发 出的 UTF-8 文本字节数
3、事件
open ws.onopen 建立连接时触发
message ws.onmessage 客户端接收服务端数据时触发
error ws.onerror 通信发生错误时触发
close ws.onclose 连接关闭时触发
4、方法
send ws.send() 使用连接发送数据
close ws.close() 关闭连接
dwebsocket 模块为 django 提供了 WebSocket 协议的实现
使用
1、安装
pip install dwebsocket
2、用法
使用 accept_websocket 或 require_websocket 装饰器修饰 view
request.is_websocket 方法用于判断是否为 websocket 协议
获取 websocket 连接对象
获取数据
发送数据
其他
Redis 是一个开源的,基于内存的,可持久化的,K-V 数据库
用途:
发布订阅:是一种消息通信模式,发送者(pub)发送消息,缩 影订阅者(sub)都可以接收消息并处理
1、在 redis 客户端中使用
2、在 python 中使用
redis 模块
订阅
发布:
代码结构
app 定义(app.py)
配置(settings.py)
配置访问地址
启用 app
配置模版路径
配置时区和国际化
配置静态资源路径
配置邮箱
配置 redis 缓存
流程
1、打开登录页面
2、发送验证码
3、登录
路由(url.py)
视图-view.py
视图-models.py
视图-templates/login.html
流程
创建 websocket 连接到 msg/,同时注册 open, error, message 事件
当连接创建,调用 websocket.send 发送上线消息
用户填写消息,点击按钮,调用 websocket.send 方法发送聊天消息
urls.py 处理 url msg/ 到视图 msg
msg 视图接收和处理 websocket 消息,同时监听和处理 redis 订阅的 消息
路由处理(view.py)
消息显示处理(index.html)
大家对此项目分享有什么疑问的请准备好在本周三晚上我们的 kk 大牛会为大家一一解答。
项目分享人:KK老师
多语言混搭开发工程师,多年 PHP、Python 项目开发经验,曾就职 360、绿盟科技,7年工作经验。擅长于 Web 安全开发、性能优化、分布式应用开发&设计等多方面,51Reboot 金牌讲师。
分享的时间:2018-12-12 21:00-22:00
参与方式:添加小助手wechat 备注:公开课,会拉入直播分享群
使用 Django WebSocket Redis 搭建在线即时通讯工具
标签:效果图 适用于 对象 发送消息 active 在服务器 三方 用户登录 package
原文地址:https://www.cnblogs.com/reboot51/p/10101744.html