专栏首页Golang语言社区游戏思维开发社区问答系统的感受

游戏思维开发社区问答系统的感受

社区订阅号:Golang语言社区 社区服务号:Golang技术社区 如有问题或建议,请公众号留言;社区Leaf实战服务器开发火热报名中

大家好,最近在开发社区的问答系统,公众账号文章由于志愿者相继有事情,近期就更新的比较少,请大家见谅。本篇给大家讲讲社区系统的部分功能说明,后面必然开源,。

问答系统 开发选型

作为一个项目或者一个产品,开始项目之前,我们都会做下来讨论下技术选型的事情,由于社区彬哥我主导社区的发展,而且社区系统开发人员就2人,所以技术上走简单的路线 选择前后端分离 如下:

前端:原生(js/html);由于功能不难,没有必要用框架; 后端:golang; 通信方式:长连接模拟短链接(由于考虑到社区系统一对一的实时在线交流而设计) 通信协议:自定义协议(传输方式json) 如下:

// --------------------------------------------------------------------------------
// 【发表评论】 C2S_WinXinPlayer_Comment_WT_Proto
// 用户提问
// 数据需要保存用户的绑定信息
type C2S_WinXinPlayer_Comment_WT struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    WenTiID   string // 问答的ID
    OpenID    string // 提问者的openid
    PLOpenID  string // PLOpenID,评论问题的人的openid
    Data      string // 组合数据发过来--服务器只负责保存---评论的内容
    Type      string // 评论的类型--提问者选择的最佳的评论
}
// S2C_WinXinPlayer_Comment_WT_Proto
type S2C_WinXinPlayer_Comment_WT struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    IS_Succ   bool   // 是否成功
}
// 数据更新操作的说明
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// 问答结构
type WenDaJG struct {
    Id      string
    OpenID  string
    Name    string
    Headurl string
    Data    string
    PicData string
    Coin    string
    State   string
    Time    string
}
// 【获取问答列表】 C2S_WinXinPlayer_GetList_WT_Proto
type C2S_WinXinPlayer_GetList_WT struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    OpenID    string // 用户的唯一凭证
    PageNum   string // 第一次获取PageNum == ”0“  ; 后面的页面 PageNum == 每页的最小ID
}
// 服务器返回
// S2C_WinXinPlayer_GetList_WT_Proto
type S2C_WinXinPlayer_GetList_WT struct {
    Protocol  uint32              // 主协议
    Protocol2 uint32              // 子协议
    Data      map[string]*WenDaJG // 5个数据
}
// --------------------------------------------------------------------------------
// 【提问功能】 C2S_WinXinPlayer_TiWen_Proto
// 用户提问
// 数据需要保存用户的绑定信息
type C2S_WinXinPlayer_TiWen struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    OpenID    string // 用户的唯一凭证
    Data      string // 组合数据发过来--服务器只负责保存
    PicData   string // 图片数据  base64数据;服务器存储
    Coin      string // 悬赏金币---由提问者自己选择多少,且大于1至少,最高100
}
// S2C_WinXinPlayer_TiWen_Proto
type S2C_WinXinPlayer_TiWen struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    IS_Succ   bool   // 是否成功
}
// 数据更新操作的说明
// --------------------------------------------------------------------------------
// 【用户讲师申请】 C2S_WinXinPlayer_Apply_Teacher_Proto
// 用户讲师申请--普通用户申请为老师
// 需要提供社区资格(申请码)--微店购买价值1000元,目活动5折
type C2S_WinXinPlayer_Apply_Teacher struct {
    Protocol   uint32 // 主协议
    Protocol2  uint32 // 子协议
    OpenID     string // 申请人的微信的OpenID 数据--服务器判断用户的唯一
    Apply_Code string // 申请码  GM 系统生成
}
// S2C_WinXinPlayer_Apply_Teacher_Proto
type S2C_WinXinPlayer_Apply_Teacher struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    Code      string // 1:表示邀请码已经使用,2:邀请码不存在,3:申请成功,4:已经申请中
}
//--------------------------------------------------------------------------------
// 【临时房间交流】 Room_AC_Broadcast_Proto
// 广播协议(针对房间内人员有效)--临时房间交流
type Room_AC_Broadcast struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    RoomUID   string // 消息接收的房间UID
    Data      string // 组合数据--手机+服务器按照一定规则定制;同时包括解答问题结束
}
//--------------------------------------------------------------------------------
// 【广播协议】
// 更新所有客户端的老师的状态信息
type Teacher_State_Broadcast struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    T_UID     string // 老师UID信息--服务器唯一ID
    T_State   string // t_1:表示空闲,t_2:忙碌,t_3:不在线,t_4:未知状态
}
//--------------------------------------------------------------------------------
// 【答题者选择---老师】 C2S_WinXinPlayer_Choose_T_Proto
//  手机请求
type C2S_WinXinPlayer_Choose_T struct {
    Protocol     uint32 // 主协议
    Protocol2    uint32 // 子协议
    T_PlayerUID  string // 提问者的UID
    T_TeacherUID string // 选择的讲师的UID信息
    T_Coin       string // 选择悬赏的金币的钱数 -----> 社区币;用户兑换活动费用等 1元=10个,用户答题使用;充值到数据
    T_Problem    string // 问题(问题描述)--->  暂时不支持  代码块提交;迭代版本中再优化
    T_IsPic      bool   // 是否有图片数据;  false:表示无; true :存在
    T_PicBase64  string // 图片base64数据;注:图片限制再90K传输;且只可以是1张
    T_IsZJ       bool   // 如果老师角色此题难度 超过提问者悬赏,当提问者设置可以追加后,老师可以点击付费增加
}
// 【答题者选择---老师】 S2C_WinXinPlayer_Choose_T_Proto
// 服务器返回
// 此协议同样需要广播给对应老师及提问者
type S2C_WinXinPlayer_Choose_T struct {
    Protocol     uint32                  // 主协议
    Protocol2    uint32                  // 子协议
    T_State      string                  // t_1:表示空闲,t_2:忙碌,t_3:不在线,t_4:未知状态  可以去除,但是为了校验可以保留(如果因为网络广播协议没有收到,以此标志位为准)
    TMP_RoomData map[string]*TEMP_RoomST // 服务器建立临时交流房间结构
}
//--------------------------------------------------------------------------------
// 用户在社区系统的结构数据
type WX_Player_Data struct {
    UID       string
    Name      string
    GroupType string // 用户组的权限,1:为问答者;2:为老师;3:为官方监督员(禁言用户权限,封号处理等)
    Lev       string // 用户的级别;包括老师星级
    Coin      string // 社区币;用户兑换活动费用等 1元=10个,用户答题使用;充值到数据
    Time      string // 注册时间
}
type WX_Player_DataDB struct {
    ID      string
    OpenID  string
    Name    string
    HeadUrl string
    XingJi  string
    Coin    string
    Type    string
    Time    string
}
// 【微信用户报名的协议】 S2C_Net_WinXin_OpenID_BaoMing_Proto
type S2C_Net_WinXin_OpenID_BaoMing struct {
    Protocol  uint32                       // 主协议
    Protocol2 uint32                       // 子协议
    Data      map[string]*WX_Player_DataDB // 微信用户绑定的系统的存储数据
}
// 【微信用户报名的协议】 C2S_Net_WinXin_OpenID_BaoMing_Proto
type C2S_Net_WinXin_OpenID_BaoMing struct {
    Protocol  uint32 // 主协议
    Protocol2 uint32 // 子协议
    Code      string // 微信授权的Code
}
//--------------------------------------------------------------------------------

部分研发截图:

本文分享自微信公众号 - Golang语言社区(Golangweb),作者:彬哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 游戏服务器之数据存档(应用数据引擎redis)

    游戏服务器之数据存档:把逻辑服务器的角色数据存档到mysql和redis,分析的是较早前的一个游戏项目的存档处理。有些设计缺点,会提出优化方式。 设计上: 逻辑...

    李海彬
  • package exec

    exec包执行外部命令。它包装了os.StartProcess函数以便更容易的修正输入和输出,使用管道连接I/O,以及作其它的一些调整。

    李海彬
  • 配置文件热加载的go语言实现

    通常我们更新应用程序的配置文件,都需要手动重启程序或手动重新加载配置。假设一组服务部署在10台机器上,你需要借助批量运维工具执行重启命令,而且10台同时重启可能...

    李海彬
  • 『Go 内置库第一季:strings』

    这一季的系列主题,主要围绕内置库进行。如果一个人写的代码比你的赞,那么他对内置库的熟悉程度一定比你强。

    谢伟
  • # python # # Challenge # Level 2

    滚神大人
  • PDO::quote讲解

    PDO::quote — 为SQL语句中的字符串添加引号。(PHP 5 = 5.1.0, PECL pdo = 0.2.1)

    砸漏
  • php实现的生成排列算法示例

    砸漏
  • iOS9.0 友盟分享详细过程

    一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了。然后在这个方法里面设置Key -...

    Mr.RisingSun
  • react-native组建wechat

    IT故事会
  • 两条命令助你成为优秀的 YAML 工程师

    我们在编写 Kubernetes 资源清单的时候可能会经常会忘记要创建的资源名称,即使知道了可能也不记得该资源对象有哪些属性可以使用了,特别是对于那些名称很长的...

    我是阳明

扫码关注云+社区

领取腾讯云代金券