chatroom-go项目手册

0. 前言

第一次写项目手册,有以下几个目的吧。

  1. 回顾下使用go语言的感受
  2. 思考一些编程细节
  3. 思考整体项目的流程

github地址

1. 项目简单说明

这个项目算是自己学习完go语言使用之后的一个简单总结吧。

  1. 顾名思义,项目本身就是完成个聊天室的功能。功能比较简单,但经过自己的优化后,还是有些能看得过眼的东西。
  2. 项目数据库使用了redis,纯粹的目的是为了下一步学习redis源码前的铺垫。
  3. 项目使用了mvc的设计模式。算是尽可能地向上面去靠拢了。
  4. 目前对go的了解没有那么深入。所以服务器端只是采用了one thread one connection的模式。
  5. 项目的很多功能仅仅是能用,而不够完善。客户端的界面也比较简陋,但是基本功能都达到了。
  6. 后序待补充

2. 目前实现的功能

  1. 登陆功能
  2. 注册功能
  3. 群聊功能
  4. 单聊功能
  5. 显示在线人数

2.1 思路

2.1.1 消息的序列化

这是第一次接触用json来序列化消息。
好处就是使用起来比较简单,方便。针对一些不定长度的字段,非常方便解析。
坏处就是可能浪费了一些字节。

回顾自己c++的项目,固定长度字段解析不谈,不定长字段一遍前面都需要len字段。但主要就是针对每种包都要写一遍解析。

各有优缺点吧。

2.2 功能描述

都是很简单的功能,也没有添加复杂的东西进去。

3. 协议

最大的收获算是对协议的理解更深刻了。

3.1 包的设计

我将总体包称作pkg。
将具体的登陆请求,响应等称作msg。

序号 数据项 长度 说明
1 包头 4字节 长度字段
2 包体 4+不定 类型字段+msg信息

这个是数据包的总体设计,请求和应答都会套用这个包。

3.2 登陆功能

3.2.1 请求

序号 数据项 长度 说明
1 userid 4字节 int类型
2 passwd 不定 实际上这里可以用加密方式固定的32字节。

3.2.2 响应

序号 数据项 长度 说明
1 code 4字节 错误码
2 Error 不定 错误类型信息

3.3 注册功能

3.3.1 请求

序号 数据项 长度 说明
1 userid 4个字节
2 username 不定
3 passwd 不定
4 status 4个字节 状态码

3.3.2 响应

序号 数据项 长度 说明
1 code 4字节 错误码
2 Error 不定 错误类型信息

3.4 群聊功能

序号 数据项 长度 说明
1 userid 4个字节
2 username 不定
3 status 4个字节 状态码
4 content 不定 明文聊天内容

3.5 点聊功能

3.5.1 请求

序号 数据项 长度 说明
1 userid 4个字节
2 username 不定
3 status 4个字节 状态码
4 touserid 4个字节
5 content 不定 明文聊天内容

3.5.2 响应

序号 数据项 长度 说明
1 userid 4个字节
2 username 不定
3 status 4个字节 状态码
4 content 不定 明文聊天内容

3.6 后台推送上线消息

序号 数据项 长度 说明
1 userid 4个字节
2 userstatus 4个字节

4 模块设计

采用mvc模式

4.1 客户端

客户端没有model,就是简单的viewer和controller(processor)。

4.1.1 viewer

使用一个隐藏的全局变量,然后类似QT一样暴露一个GetTheViewer的接口。相当于是饿汉模式。

4.1.2 processor

简单分了下层

  1. 有关用户登陆和注册的分给了userProcessor
  2. 有关消息发送的分给了smsProcessor

同样是影藏了一个全局的mainProcessor。然后暴露接口使用。

4.2 服务器端

服务器端的设计比较复杂一些。

简单来说

  1. 服务器监听对应端口,当连接到来时,启动一个go程
  2. go程启动后,解pkg,然后根据msg.Type调用不同的processor
  3. processor通过DAO不断和Redis交互,来验证数据的有效性。

之前c++对银行系统和这里对比,仅仅是服务器模式的不同。
muduo是通过启动多个reactor,然后每个reactor下挂着多个connection。而go语言的go程开销低,所以可以采用这种模式。

chatroom项目手册相关推荐

  1. 有利可图网_公布有利可图的辅助项目手册

    有利可图网 In 2009 I was one half of a successful web development consultancy business, working alongside ...

  2. 有利可图网_第一章:有利可图的项目手册

    有利可图网 This is the first chapter of my book, which you can also download in PDF format. If you want t ...

  3. 有利可图网_有利可图的项目手册-现在可用

    有利可图网 After an epic week of battling with e-book formats, this morning I have launched my new book T ...

  4. 【项目】C++ MiniFtpd项目手册 笔记版

    文章目录 第一章FTP协议 1.1 Ftp协议简介 1.2 FTP支持的文件类型 1.3 FTP文件的数据结构 1.4 文件的传输方式 1.5 FTP工作原理 1.5.1 启动FTP 1.5.2 建立 ...

  5. Tomcat部署项目手册

    目录 大致步骤 细节问题 温馨提示 第一次使用Tomcat去部署项目,也是在搜攻略,但并不是所有的都是完全正确.细节.事后我总结一下,需要的朋友可以参考下,欢迎指正. 大致步骤 将文件打包成war包 ...

  6. CHATROOM项目整理

    思路 后端交给洪老师开发,我来开发前端页面,遇到问题要及时沟通,比如前后端交互,数据库抽取,技术后续需要提升,这样页面才能不断完善进化. 目前进度 a.后端进度 后端在实现用户注册登录功能 b.前端进 ...

  7. ifs 报表开发手册_房地产开发资质要求《暂定资质证书》相关规定

    房地产开发资质.<暂定资质证书>文件相关规定 新设立的房地产开发企业应当自领取营业执照之日起30日内,文件规定持下列文件到房地产开发主管部门备案: (一)营业执照复印件: (二)企业章程: ...

  8. java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)

    Java团队课程设计-socket聊天室(Day4总结篇) 团队名称: ChatRoom 项目git地址: git提交记录(仅截取部分): 面向对象设计包图.类图 包图 UML类图 总结: 首先总结一 ...

  9. yocto 知:官方手册

    文章目录 文档 手册 文档 yocto项目手册:https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html yocto项目文档 ...

最新文章

  1. WebStorm 打开多个项目的方法
  2. 在树莓派上用python控制LED
  3. hdu 1005 1021 递归超限 找规律 // 只要看题中n较大都是有规律的
  4. java求数列的最大子段和_天下无双的公考必考题 数量关系: 最值问题②(构造数列)...
  5. vivadohlsdsp_Vivado HLS学习笔记
  6. c语言编程软件开机自动启动,C语言实现程序开机自启动
  7. dataset中的数据批量导入oracle数据库,C#如何把某个文件夹下的所有Excel文件导入Oracle数据库。详细点!...
  8. java forkjoinpool_Java并发——Fork/Join框架与ForkJoinPool
  9. 使用c#调用XMLHTTP(XMLHTTPClass) ,发送和返回 json
  10. 拓端tecdat|R语言时间序列TAR阈值自回归模型
  11. atitit knowmng知识管理 索引part2
  12. 二阶矩阵转置怎么求_使用mathematica11软件求解2/3/4阶矩阵的转置矩阵教程
  13. 音响常见故障如何解决?
  14. C 喵帕斯之平地摔 SDUT
  15. 品牌如何开展饥饿营销?
  16. Android中屏蔽有新短信时通知栏里的通知
  17. CSS3选择器(选择符)
  18. 奇兔recovery卡刷教程_奇兔Recovery(安卓手机刷机助手)V8.2.1.4 最新版
  19. Acm程序设计学习第二周
  20. Liang-GaRy啃linux书想吐(六)

热门文章

  1. Android通话接通监听
  2. EXCEL激活单元格链接并访问
  3. 小米路由器 3G 开启SSH 安装 MT 工具箱 【环境搭建,小米路由器】
  4. kafka的使用场景
  5. 月夜_飘云羽逸_新浪博客
  6. 渡课学习第20天:太倒霉了
  7. 百余个实用网站,一次性分享出来,值得收藏。
  8. 关于《梦回水浒》的几个问题释疑
  9. printf函数打印
  10. 火狐浏览器默认纸张letter(信纸)更改为 A4纸张BUG修复