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

一、需求

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

二、需求分析设计

设计主要分为三大块:

. 客户端
. 服务端
. 客户端与服务端通信协议

三、服务端开发

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

chat聊天系统项目的更多相关文章

  1. [Chat]实战:仿网易云课堂微信小程序开发核心技术剖析和经验分享

    本Chat以一个我参与开发并已上线运营近2年——类似网易云课堂的微信小程序项目,来进行微信小程序高级开发的学习. 本场Chat围绕项目开发核心技术分析,帮助你快速掌握在线视频.音频类小程序开发所需要的 ...

  2. 如何用WebSocket实现一个简单的聊天室以及单聊功能

    百度百科中这样定义WebSocket:WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端.简单的说,We ...

  3. spring websocket 和socketjs实现单聊群聊,广播的消息推送详解

    spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随 ...

  4. python 全栈开发,Day130(多玩具端的遥控功能, 简单的双向聊天,聊天记录存放数据库,消息提醒,玩具主动发起消息,玩具主动发起点播)

    先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.3.zip 注意:由于涉及到 ...

  5. [开源]C#中开源软件大汇总(外国的)

    一.博客类项目 1.SubText 项目介绍:Subtext 是一个个人博客发布平台,详细的介绍请进SubText 项目分类:博客 项目license:BSD License 项目主页:http:// ...

  6. TCP 错误代码 10013: 试图以其访问权限所禁止的方式访问套接字

    大家遇到的问题可能是登录没反应,这时,大家要充分利用调试工具,调试工具可能会提示下面错误: 未能连接到 net.tcp://swk-pc:4502/chatservice.svc.连接尝试的持续时间为 ...

  7. 团队项目:"Jarvis For Chat"

    "Jarvis For Chat"项目简介 项目详情信息已经在上一篇博客中详细给出,详请查看博客 团队成员 姓名 学号 张扬(队长) 031602345 苏韫月 031602631 ...

  8. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 <迷你微信>服务器端是使用Java语言,Mina框架编写的,一个良好的架构关系到后期迭代的方便程度 ...

  9. Java小项目之:教你做个聊天系统!

    Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...

随机推荐

  1. windows之电脑开机出现 this product is covered by one or more of the following prtents

    电脑开机出现 this product is covered by one or more of the following prtents 有次意外断电后就每次都出现这个提示,然后要等检查完才能进入 ...

  2. 【转】Oracle EBS中查询Profile的各种SQL

    参考 http://blog.csdn.net/pan_tian/article/details/7652968#t0 Using API FND_PROFILE.save to update pro ...

  3. NOIP2018总结

    细细想来,学习OI也有4年多的时间了,今年已经是第二次参加noip提高组了,有必要写点什么了 NOIP2018 记得在天刚蒙蒙亮的时候走进70中,这是第四次了,但紧张只增不减,在刺骨的寒风下身体微微发 ...

  4. html5 css折叠导航栏

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. Appium+Python3+iOS真机环境搭建

    Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用. 本次环境配置相关:macOS:10.13.4Appium-desktop:1. ...

  6. World is Exploding (容斥 + 统计)

    题意:满足题目中的式子,a < b && c < d && Va < Vb && Vc > Vd 思路:先求不讨论位置重合的情况 ...

  7. C博客作业06--结构体&文件

    1.本章学习总结 1.1思维导图 1.2本章学习体会 学习了结构和文件,又是懵懵的课了,我的天啊.结构还好,题目集一出就做了,不是很难,感觉掌握的还可以,不过这只是感觉而已,等到真正来写大作业的时候又 ...

  8. LeetCode9 回文数

    题目链接:https://leetcode-cn.com/problems/palindrome-number/ 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数 ...

  9. redis使用总结(二)(jedis使用)

    Jedis使用(Jedis中的API和redis的指令基本相同) 1.创建maven工程,在pom文件中导入jedis的坐标 <dependency> <groupId>red ...

  10. ASP.NET之虚方法

    1.虚方法关键字? Virtual 2.虚方法运行的周期? 虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,执行 ...