zoukankan      html  css  js  c++  java
  • chat聊天系统项目

    项目名称:实现一个在线聊天系统?

    一、需求

    1. 海量用户在线聊天系统;
    2. 用户登录注册;
    3. 根据用户ID或者Nickname搜索并添加用户;
    4. 动态知道好友上下线;
    5. 可以创建群并添加好友到群组成员;
    6. 可以实现一对多及一对一交流;
    7. 可以接收离线消息;
    8. 实现客户端甚至实现手机app交流;

    二、需求分析设计

    设计主要分为三大块:

    1. 客户端
    2. 服务端
    3. 客户端与服务端通信协议

    三、服务端开发

    1. 用户管理

    用户id:数字
    用户密码:字母数字组合
    用户昵称:用来显示
    用户性别:字符串
    用户头像:url
    用户上线登录时间:字符串
    用户是否在线:online

    用户信息使用结构体表示:

    type User struct {
        UserId    int    `json:"user_id"`
        Passwd    string `json:"passwd"`
        Nick      string `json:"nick"`
        Sex       string `json:"sex"`
        Header    string `json:"header"`
        LastLogin time.Time `json:"last_login"`
        Status    int    `json:"status"`
    }

    使用redis的hash表完成用户数据存储:

    redis hash: users
    key:userId value:序列化 User 结构体

    2. 处理用户动作

    (1)发送信息
    (2)接收信息

    3. 用户注册&登录

    4. 用户消息离线存储

    四、客户端开发

    1. 发送用户登录注册请求;
    2. 添加好友请求;
    3. 发送信息请求;
    4. 接收消息请求;
    5. 获取用户列表;

    五、通信协议

    1. 客户端和服务端数据通信协议形式如下:

    • 首发送本次通信数据的长度(将数据长度保存到buf[0:4]的数组中)
    • 发送序列化的数据(将要发送的数据保存到buf[0:8192]的数组中)

    2. 每次发送的的数据为一个序列化为结构体:

    type Message struct {
        Cmd string `json:"cmd"`
        Data string `json:"data"`
    }

    其中 Cmd:表示此次通信的动作,是登录还是注册等;

            Data:表示Cmd动作的数据。

    六、代码实现

        目前搭建了一个框架,实现了部分功能,后面会持续更新:实现见Github地址https://github.com/XJL635438451/QQChatProject

  • 相关阅读:
    MySql控制台命令
    MySql笔记
    Unity打包android时会出的一些问题
    Unity3D2017.3.0基于Vuforia 开发AR流程(1)
    基于Unity开发广州幻境的Handy结合HTC Tracker的开发坑
    基于Unity 关于SteamVR中 手柄/Tracker不显示的问题
    使用Socket对序列化数据进行传输(基于C#)
    7. 整数反转
    6. Z 字形变换
    53. 最大子序和
  • 原文地址:https://www.cnblogs.com/xuejiale/p/10701913.html
Copyright © 2011-2022 走看看