做爲一個項目或者一個產品,開始項目以前,咱們都會作下來討論下技術選型的事情,因爲社區彬哥我主導社區的發展,並且社區系統開發人員就2人,因此技術上走簡單的路線 選擇先後端分離 以下:html
前端:原生(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
}
//--------------------------------------------------------------------------------