简单聊天软件, 使用express + cocos2dx

2019-11-30  本文已影响0人  沫晚霞光

也是闲得蛋疼, 自己编写了一个可以跑的聊天软件(超级简易, 能添加好友, 发送文字, 离线接受消息).

1. 功能

  1. 用户注册
  2. 搜索/添加好友
  3. 与好友进行文字聊天

2. 用到技术

采用C-S架构
客户端: cocos2dx-lua
服务器: mysql + sequelize + express

数据通讯方式: socket, http-json

3. 简要描述

  1. 数据库以及表
    数据库使用mysql, 开源, 好用
    表主要有下面3张:
    (1) 首先是用户表, 涉及uid, uname, password, email等
    (2) 然后是好友表, 主键自然增长, 有srcUid, destUid等
    (3) 然后是消息表, 包括消息id, 类型, 状态(是否已读), srcUid, destUid, 发送时间等
  2. ORM采用 sequelize
    如果讨厌写sql语句(比如我这种渣渣), 可使用ORM代替
    之前有过sequelize的简单介绍:传送门
    主要作用是将领域模型与数据库对应起来
    举个例子, "用户(User)"是一个模型, 在数据库中也对应一张用户表, 因此用sequelize可以将模型与数据库表关联起来, 之后的有关数据库操作(例如新建用户), 只需要按照sequelize方式很自然地做到
  3. 后端采用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)向请求者通知"添加好友请求的消息已发送"
  4. 客户端使用cocos2dx-lua
    简单轻快好上手, 由于自己是做这个的, 又很喜欢lua, 就用这个了
    客户端相当于简易播放器, 负责数据展示.
    客户端页面显示就是这一块了, 由于没有UI设计, 所以界面很糙, 但炫酷的界面无非是播放器好看一点, 这个需要好的UI呀
    主要分为三个部分:
    (1) 页面
    每一个页面都对应一份.lua文件, 这样的好处是只用关心页面, 改动UI, 不需要担心改变逻辑
    (2) 控制器
    对于从后端拉取的数据类的接口, 从页面里分离出来, 只关注接口的改动, 还有一些简单的逻辑功能也放在这里, 改动逻辑不用担心改了页面
    (3) 数据模型
    对于一些多个页面常用的数据模型(如User), 不必要每次都从后端拉取, 只有更新的时候重新从后端拉取, 使用单例模式封装起来, 保证各个页面可以访问

4. 展示

聊天用户Alice 聊天用户BOB

服务器架设在腾讯云上, 一个app在cocos2dx开发工具player上跑, 一个在蓝叠模拟器上跑. 发现蓝叠上的时差有八个小时, 估计地区设置在本初子午线那里了.
另外, 客户端还使用了小型数据库sqlite3, 用来本地存储消息

上一篇 下一篇

猜你喜欢

热点阅读