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

  • 相关阅读:
    T4 (Text Template Transformation Toolkit)
    GUI Design Studio
    51劳有所获 54务实青年
    [书目20110502]把时间当作朋友
    Rdlc子报表的动态添加
    [转]更新Android SDK到3.0版本时,遇到Failed to rename directory E:\android\tools to E:\android\temp\ToolPackage.old01问题
    JSON
    javascript 特征侦测技术
    IE的setAttribute bug
    将"类数组对象"转换成数组对象
  • 原文地址:https://www.cnblogs.com/xuejiale/p/10701913.html
Copyright © 2011-2022 走看看