社区订阅号: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
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句