也是闲得蛋疼, 自己编写了一个可以跑的聊天软件(超级简易, 能添加好友, 发送文字, 离线接受消息).
1. 功能
- 用户注册
- 搜索/添加好友
- 与好友进行文字聊天
2. 用到技术
采用C-S架构
客户端: cocos2dx-lua
服务器: mysql + sequelize + express
数据通讯方式: socket, http-json
3. 简要描述
- 数据库以及表
数据库使用mysql, 开源, 好用
表主要有下面3张:
(1) 首先是用户表, 涉及uid, uname, password, email等
(2) 然后是好友表, 主键自然增长, 有srcUid, destUid等
(3) 然后是消息表, 包括消息id, 类型, 状态(是否已读), srcUid, destUid, 发送时间等 - ORM采用 sequelize
如果讨厌写sql语句(比如我这种渣渣), 可使用ORM代替
之前有过sequelize的简单介绍:传送门
主要作用是将领域模型与数据库对应起来
举个例子, "用户(User)"是一个模型, 在数据库中也对应一张用户表, 因此用sequelize可以将模型与数据库表关联起来, 之后的有关数据库操作(例如新建用户), 只需要按照sequelize方式很自然地做到 - 后端采用express框架
js给人的感觉就是快速好上手, 很多东西可以直接用, 它都自带得有. express轻量常用, 也很好上手
将后端大致分为3层:
(1) controller层: 使用express框架中的route.js, 将web请求与后端服务层连接, 后端的数据也通过这些controller返回给请求者
(2) service层: controller穿过来的任务有些是重复的, 有些又是比较复杂的, 还有考虑到有些业务也可能会变动, 因此写了各种manager.js来处理这些请求
(3) model层: 各种领域模型放在这里, 如本例子里的User, Message, Friend等, 跟数据库和服务层关联
举个例子,
对于"用户请求添加好友"这个操作, 首先请求者发来请求, 然后route目录下的friend.js(controller)将该请求传递给FriendManager通知要添加好友, FriendManager调用添加好友服务(service), 该服务通知model层的FriendRequest模型(model), model在数据库记下这条记录, 最后一层层返回, 最后route.js(controller)向请求者通知"添加好友请求的消息已发送" - 客户端使用cocos2dx-lua
简单轻快好上手, 由于自己是做这个的, 又很喜欢lua, 就用这个了
客户端相当于简易播放器, 负责数据展示.
客户端页面显示就是这一块了, 由于没有UI设计, 所以界面很糙, 但炫酷的界面无非是播放器好看一点, 这个需要好的UI呀
主要分为三个部分:
(1) 页面
每一个页面都对应一份.lua文件, 这样的好处是只用关心页面, 改动UI, 不需要担心改变逻辑
(2) 控制器
对于从后端拉取的数据类的接口, 从页面里分离出来, 只关注接口的改动, 还有一些简单的逻辑功能也放在这里, 改动逻辑不用担心改了页面
(3) 数据模型
对于一些多个页面常用的数据模型(如User), 不必要每次都从后端拉取, 只有更新的时候重新从后端拉取, 使用单例模式封装起来, 保证各个页面可以访问
4. 展示
![](https://img.haomeiwen.com/i4925380/bab00380f0d009b4.png)
![](https://img.haomeiwen.com/i4925380/4ffab0a348af6c60.png)
服务器架设在腾讯云上, 一个app在cocos2dx开发工具player上跑, 一个在蓝叠模拟器上跑. 发现蓝叠上的时差有八个小时, 估计地区设置在本初子午线那里了.
另外, 客户端还使用了小型数据库sqlite3, 用来本地存储消息
网友评论