作为一个项目或者一个产品,开始项目之前,我们都会做下来讨论下技术选型的事情,由于社区彬哥我主导社区的发展,而且社区系统开发人员就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
}
//--------------------------------------------------------------------------------

部分研发截图:



©著作权归作者所有:来自51CTO博客作者mb5fdb0a1b25659的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 全息电力行业解决方案
  2. 【Nest教程】实现一个简单的用户增删改查功能
  3. 【Nest教程】Nest项目用户密码加密
  4. Elastic开源协议改了,用户怎么办?
  5. 通配符、用户组管理与文件权限
  6. Java基础系列:计算机网络基础概念
  7. 系统发布用户通知以及相关增强
  8. 一次内存性能提升的项目实践
  9. HCDA 协议配置

随机推荐

  1. Android初级教程启动定时器详解
  2. android developer 打不开 解决办法
  3. 日常收集的Android开发资料来源
  4. Android 字符串格式化 千位符
  5. android button自定义触摸前以及触摸时的
  6. android获取文件目录
  7. Android代码实现APK文件的安装与卸载
  8. Android(安卓)-- Camera源码简析,启动流程
  9. 开源中国-android软件资源整理
  10. ProgressDialog