chat聊天系统项目
项目名称:实现一个在线聊天系统?
一、需求
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聊天系统项目的更多相关文章
- [Chat]实战:仿网易云课堂微信小程序开发核心技术剖析和经验分享
本Chat以一个我参与开发并已上线运营近2年——类似网易云课堂的微信小程序项目,来进行微信小程序高级开发的学习. 本场Chat围绕项目开发核心技术分析,帮助你快速掌握在线视频.音频类小程序开发所需要的 ...
- 如何用WebSocket实现一个简单的聊天室以及单聊功能
百度百科中这样定义WebSocket:WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端.简单的说,We ...
- spring websocket 和socketjs实现单聊群聊,广播的消息推送详解
spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随 ...
- python 全栈开发,Day130(多玩具端的遥控功能, 简单的双向聊天,聊天记录存放数据库,消息提醒,玩具主动发起消息,玩具主动发起点播)
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.3.zip 注意:由于涉及到 ...
- [开源]C#中开源软件大汇总(外国的)
一.博客类项目 1.SubText 项目介绍:Subtext 是一个个人博客发布平台,详细的介绍请进SubText 项目分类:博客 项目license:BSD License 项目主页:http:// ...
- TCP 错误代码 10013: 试图以其访问权限所禁止的方式访问套接字
大家遇到的问题可能是登录没反应,这时,大家要充分利用调试工具,调试工具可能会提示下面错误: 未能连接到 net.tcp://swk-pc:4502/chatservice.svc.连接尝试的持续时间为 ...
- 团队项目:"Jarvis For Chat"
"Jarvis For Chat"项目简介 项目详情信息已经在上一篇博客中详细给出,详请查看博客 团队成员 姓名 学号 张扬(队长) 031602345 苏韫月 031602631 ...
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)
欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 <迷你微信>服务器端是使用Java语言,Mina框架编写的,一个良好的架构关系到后期迭代的方便程度 ...
- Java小项目之:教你做个聊天系统!
Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...
随机推荐
- JavaScript监控页面input输入整数且只能输入2位小数
<input type="text" id="money" /> <script> $(function () { $('#money' ...
- carbondata-summary
源码 http://www.zhuyongpeng.cn/1699.html 融合数据白皮书:Apache CarbonData成为主流融合存储技术 http://cloud.yesky.com/46 ...
- iframe子页面与父页面元素的访问以及js变量的访问
1.子页面访问父页面元素 parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素 document.getEle ...
- 依据ECMA规范,手写一个bind函数
Function.prototype.bind 函数,参见ECMA规范地址 如题,这次来实现一个boundFunction函数,不挂载在Function.prototype上,而是一个单独声明的函数. ...
- cookie小结
cookie的用处:当不同的用户访问同一家网站时(采用相同的请求地址),服务器如何区分不同用户的请求操作呢?需要浏览器对发出的每个请求进行标识.属于同一个会话的请求,都带有相同的标识,不同的会话带有不 ...
- Jenkins - ERROR: Exception when publishing, exception message [Failure] Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
今天在处理Jenkins的时候出现了一些异常,看着控制台,编译都是通过的,只是没有部署上来,查看了控制台日志,如下: 刚开始还以为是权限通道什么的,后来才发现是执行脚本根本不让执行,以前也遇到过,都是 ...
- Rsync+unison双向文件同步
1.配置RSYNC服务器的同步源: 基于SSH同步源 rsync -avz /server/rsyncd/* chen@172.16.23.204:/client/rsyncd 基于RSYNC同步源 ...
- Ubuntu 安装第三方工具
1. pycharm 安装(链接:https://pan.baidu.com/s/1fIp-AhBmnPvqYW40140RLw 提取码:ukkv ) 1.运行以下命令安装 sh pycha ...
- BELLMEN-FORD普通
#include <iostream> using namespace std; int m, n, u[100010], v[100010], w[100010];int check;i ...
- JDK源码——单例模式
JDK源码中单例模式的应用 1.Runtime类 Runtime类封装了Java运行时的环境.每一个java程序实际上都是启动了一个JVM进程,那么每个JVM进程都是对应这一个Runtime实例,此实 ...