Skip to content

songyachun/WebChat

Repository files navigation

多人即时聊天

开发规范:

  1. 前端

    html、css、js、ajax

  2. 后端环境 Python 3.6.7+ django 1.11.8+mysql 5.7+Ubuntu18.04+dwebsocket

  3. 通信协议 http,websocket

  4. 通信格式 json,html

  5. API 规范 一定程度上符合 RESTful 定义

功能

  1. 用户的登录和注册
  2. 并发:支持连接处理多个用户请求
  3. 查询天气,新闻资讯
  4. 好友列表
  5. 好友在线状态
  6. 即时聊天
  7. 离线接收消息,历史记录
  8. 群聊功能

技术分析

  1. Web后端框架选择:Django

  2. 全双工通讯:由于是即时聊天,需要服务器主动向浏览器推送数据,http通讯协议无法满足

    1. 引用WebSocket,全双工通讯的协议。
    2. Django使用Channels实现WebSocket
  3. 并发:多用户同时操作 主要为IO操作

    1. 多线程/多进程并发:占用较多的资源
      1. fork多进程
    2. IO多路复用:I/O多路复用是在单一进程的上下文中的,因此每个逻辑流程都能访问该进程的全部地址空间,所以开销比多进程低得多;缺点是编程复杂度高。
      1. select方式,支持多平台,逻辑简单,支持最大并发数量(1024),相对epoll效率较低
      2. poll方式,
      3. epoll方式,
    3. 使用nginx的并发功能
  4. 数据库

    1. 数据库存储:查询效率高,方便程序调用,做自动化处理
    2. 数据库选择:mysql
    3. 实现方式:通过Django的Model模型层,对数据库进行相对的增删改查(CURD)
  5. 界面:使用html文件在web浏览器上呈现

结构设计

  1. 基于Django框架的设计
  2. 由于Django是B/S架构,使用浏览器作为客户端
    1. 通讯模块
      1. 与客户端通讯,接收客户端的请求,将响应发送给客户端
      2. 与数据库通讯,数据的增删改查
    2. 并发处理模块
      1. 同时处理多个客户端请求
    3. 逻辑处理模块
      1. 处理客户请求,组织响应内容
  3. 数据库操作类(查询,增加,修改)
    1. 数据库名称:wechat_db

功能模块设计

注册:

功能

  1. 确保用户名,手机号唯一

  2. 用户名和密码约束

    • 用户名(字段约束)--由2-10位字母、数字、下划线或中文组成,以字母或中文开头
    • 昵称(可以相同)
    • 邮箱(字段验证)-- 符合邮箱格式
    • 密码(长度限制,字段约束)--
      • 由6-12位字母、数字组成
      • 不能全部是数字
      • 不能全部是字母
      • 必须是数字或字母
  3. 密码加密

    • 密码隐式存储在数据库中,可选择加盐加密方法
  4. 用户状态验证

    • 登入记住用户名功能
    • 禁止用户未登入直接进入聊天界面
  5. 短信验证

    • 手机短信验证

实现

  1. 注册页面路径:/verify/signup
  2. 需要post的数据名:username,password...
  3. 服务端:
    1. 接收,判断用户名是否已经存在,存在返回”用户名已经存在“,反之返回注册成功,并进入聊天界面
    2. 存储注册成功的用户,密码使用加盐加密
    3. session验证:
      • 验证用户是不是一个合法用户
      • 在当前用户的session上记录当前用户名的名称和id
        • request.session["user"]={"user":"news","id":1}
      • 没有登陆的用户 session["user"]不存在
      • 退出登陆时,删除session["user"]

登录

  1. 路径:/verify/signin
  2. 记住上一次登入的用户名
    1. 使用cookie存储用户名

忘记密码

  1. 手机短信验证
    1. url:/verify/pwd_reset
    2. 验证成功后进入密码修改页面
  2. 密码修改
    1. url:/verify/pwd_reset2

查询天气,新闻资讯

  • 根据客户端访问的IP,获取所在城市,查询天气,显示在聊天主界面
  • 爬取新华网的五条头条新闻,显示在聊天主界面
    • 图片、文章链接、标题

并发

  • 使用 nginx + uwsgi 为 django 提供高并发 web 服务

修改用户个人信息

  • 上传头像
  • 修改密码、邮箱、电话号码、昵称、性别
  • 友情链接
  • 上传下载文件

好友列表

接口API和数据约束:

  1. 添加好友
    • 申请好友
      • url:ws://127.0.0.1:8000/chat/friend_id
      • 通讯方式:websocket
      • 请求格式:json{ “sender”:请求者,"reciver":"接收者",”step“:“0”,"dataType":’0‘}
      • 响应格式:json{code":200, “sender”:请求者,"reciver":"接收者",”step“:”1”,"dataType":”0”}
    • 回复请求
      • url:ws://127.0.0.1:8000/chat/friend_id
      • 通讯方式:websocket
      • 请求格式:json{“sender”:请求者,"reciver":"接收者",”step“:”2”,"status":"回复状态","dataType":”1”}
      • 响应格式:json{code":200, “sender”:请求者,"reciver":"接收者",”step“:”3”,"status":"回复状态","dataType":”1”}
  2. 推送好友列表
    • url:ws://127.0.0.1:8000/chat/friend_list
    • 通讯方式:websocket
    • 请求格式:json{code":200, "friends":[{"username":好友名称,"step":"5", "friend_head":头像} .....]}
  3. 好友详细信息
    • url:ws://127.0.0.1:8000/chat/detial_info
    • 通讯方式:ajax
    • 请求格式:"username":好友名称
    • 响应格式:json{code":200, "username":好友名称,"friend_head":头像....}
  4. 判断好友是否已经存在
  5. 好友添加成功后刷新好友列表
    • url:ws://127.0.0.1:8000/chat/friend_id
    • 通讯方式:websocket
    • 请求格式:json{code":200, "friends":[{"username":好友名称,"step":"5", "friend_head":头像} .....]}
  6. 获取头像
    • 用户头像
    • 好友头像

一对一聊天

  • url:ws://127.0.0.1:8000/chat/friend_id
  • 通讯方式:websocket
  • 请求格式:json{ “sender”:请求者,"reciver":"接收者","dataType":“2”,"msg":" ...","time":"2019-8-12 18:20:23"}
  • 响应格式:json{code":200, “sender”:请求者,"reciver":"接收者","dataType":“2”,"msg":" ...","time":"2019-8-12 18:20:23"}

详细设计


2019.7.22 修改登录界面

登录界面 --> login.html

  1. 添加忘记密码界面展示
  2. 修改提示错误样式

2019.7.23 增加忘记密码功能

忘记密码功能

  1. 忘记密码界面 --> password_reset.html
  2. 修改密码界面 --> password_reset2.html

修改注册界面的获取验证码界面

  1. 注册界面 --> signup.html
  2. 添加输入验证码文本框 name="veri_code"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •