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

一、需求

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. .htaccess使用方法介绍

    1..htaccess文件使用前提 .htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体地怎样接待它,就是此文件的 ...

  2. xlua build时 报错处理

    error trpe 'UnityEngine.Lighr' does not contain a definiton for 'sgadowRadius' and no extension meth ...

  3. (.NET高级课程笔记)泛型总结

    泛型总结 1.引入泛型:延迟声明,即在声明的时候没有指定参数类型,只有当调用的时候才会确定 其参数类型(架构师的理念:推迟一切可以推迟的) 2.如何声明和使用泛型 3.泛型的好处和原理 4.泛型类.泛 ...

  4. Django框架详细介绍---认证系统

    在web开发中通常设计网站的登录认证.注册等功能,Django恰好内置了功能完善的用户认证系统 1.auth模块 from django.contrib import auth 模块源码 import ...

  5. ES6中的解构赋值

    在解释什么是解构赋值前,我们先来看一下, ES5 中对变量的声明和赋值. var str = 'hello word'; 左边一个变量名,右边可以是字符串,数组或对象. ES6 中增加了一种更为便捷的 ...

  6. localStorage,sessionStorage和cookie的区别

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  7. docker tmpfs 的测试结果

    创建 2G 内存的 Container 使用tmpfs挂载到 /tmp docker run --rm -it --memory 2g --mount type=tmpfs,destination=/ ...

  8. js惰性函数

    假设我们需要写一个函数,返回首次调用该方法的时间,注意是首次. 1.普通函数,首先定义一个全局变量 t var t; function(){ if(t) return t; t = new Date( ...

  9. 用vue脚手架创建bootstrap-vue项目

    用vue脚手架创建bootstrap-vue项目 框架的地址:https://bootstrap-vue.js.org/docs/ 第一步 vue init webpack demo第二步 cd de ...

  10. 利用mybatis-generator自动生成代码,发生:Plugin execution not covered by lifecycle configuration后解决方案

    1,报错信息 Plugin execution not covered by lifecycle configuration: org.mybatis.generator:mybatis-genera ...