chatroom项目手册
chatroom-go项目手册
0. 前言
第一次写项目手册,有以下几个目的吧。
- 回顾下使用go语言的感受
- 思考一些编程细节
- 思考整体项目的流程
github地址
1. 项目简单说明
这个项目算是自己学习完go语言使用之后的一个简单总结吧。
- 顾名思义,项目本身就是完成个聊天室的功能。功能比较简单,但经过自己的优化后,还是有些能看得过眼的东西。
- 项目数据库使用了redis,纯粹的目的是为了下一步学习redis源码前的铺垫。
- 项目使用了mvc的设计模式。算是尽可能地向上面去靠拢了。
- 目前对go的了解没有那么深入。所以服务器端只是采用了one thread one connection的模式。
- 项目的很多功能仅仅是能用,而不够完善。客户端的界面也比较简陋,但是基本功能都达到了。
- 后序待补充
2. 目前实现的功能
- 登陆功能
- 注册功能
- 群聊功能
- 单聊功能
- 显示在线人数
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
简单分了下层
- 有关用户登陆和注册的分给了userProcessor
- 有关消息发送的分给了smsProcessor
同样是影藏了一个全局的mainProcessor。然后暴露接口使用。
4.2 服务器端
服务器端的设计比较复杂一些。
简单来说
- 服务器监听对应端口,当连接到来时,启动一个go程
- go程启动后,解pkg,然后根据msg.Type调用不同的processor
- processor通过DAO不断和Redis交互,来验证数据的有效性。
之前c++对银行系统和这里对比,仅仅是服务器模式的不同。
muduo是通过启动多个reactor,然后每个reactor下挂着多个connection。而go语言的go程开销低,所以可以采用这种模式。
chatroom项目手册相关推荐
- 有利可图网_公布有利可图的辅助项目手册
有利可图网 In 2009 I was one half of a successful web development consultancy business, working alongside ...
- 有利可图网_第一章:有利可图的项目手册
有利可图网 This is the first chapter of my book, which you can also download in PDF format. If you want t ...
- 有利可图网_有利可图的项目手册-现在可用
有利可图网 After an epic week of battling with e-book formats, this morning I have launched my new book T ...
- 【项目】C++ MiniFtpd项目手册 笔记版
文章目录 第一章FTP协议 1.1 Ftp协议简介 1.2 FTP支持的文件类型 1.3 FTP文件的数据结构 1.4 文件的传输方式 1.5 FTP工作原理 1.5.1 启动FTP 1.5.2 建立 ...
- Tomcat部署项目手册
目录 大致步骤 细节问题 温馨提示 第一次使用Tomcat去部署项目,也是在搜攻略,但并不是所有的都是完全正确.细节.事后我总结一下,需要的朋友可以参考下,欢迎指正. 大致步骤 将文件打包成war包 ...
- CHATROOM项目整理
思路 后端交给洪老师开发,我来开发前端页面,遇到问题要及时沟通,比如前后端交互,数据库抽取,技术后续需要提升,这样页面才能不断完善进化. 目前进度 a.后端进度 后端在实现用户注册登录功能 b.前端进 ...
- ifs 报表开发手册_房地产开发资质要求《暂定资质证书》相关规定
房地产开发资质.<暂定资质证书>文件相关规定 新设立的房地产开发企业应当自领取营业执照之日起30日内,文件规定持下列文件到房地产开发主管部门备案: (一)营业执照复印件: (二)企业章程: ...
- java仿聊天室项目总结_Java团队课程设计-socket聊天室(Day4总结篇)
Java团队课程设计-socket聊天室(Day4总结篇) 团队名称: ChatRoom 项目git地址: git提交记录(仅截取部分): 面向对象设计包图.类图 包图 UML类图 总结: 首先总结一 ...
- yocto 知:官方手册
文章目录 文档 手册 文档 yocto项目手册:https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html yocto项目文档 ...
最新文章
- WebStorm 打开多个项目的方法
- 在树莓派上用python控制LED
- hdu 1005 1021 递归超限 找规律 // 只要看题中n较大都是有规律的
- java求数列的最大子段和_天下无双的公考必考题 数量关系: 最值问题②(构造数列)...
- vivadohlsdsp_Vivado HLS学习笔记
- c语言编程软件开机自动启动,C语言实现程序开机自启动
- dataset中的数据批量导入oracle数据库,C#如何把某个文件夹下的所有Excel文件导入Oracle数据库。详细点!...
- java forkjoinpool_Java并发——Fork/Join框架与ForkJoinPool
- 使用c#调用XMLHTTP(XMLHTTPClass) ,发送和返回 json
- 拓端tecdat|R语言时间序列TAR阈值自回归模型
- atitit knowmng知识管理 索引part2
- 二阶矩阵转置怎么求_使用mathematica11软件求解2/3/4阶矩阵的转置矩阵教程
- 音响常见故障如何解决?
- C 喵帕斯之平地摔 SDUT
- 品牌如何开展饥饿营销?
- Android中屏蔽有新短信时通知栏里的通知
- CSS3选择器(选择符)
- 奇兔recovery卡刷教程_奇兔Recovery(安卓手机刷机助手)V8.2.1.4 最新版
- Acm程序设计学习第二周
- Liang-GaRy啃linux书想吐(六)