通訊模塊協(xié)議接口【初稿】

時序圖

登錄轿塔,密鑰交換流程:

Paste_Image.png

如果重連返回的結果失敗,可能是因為服務器重啟或會話已過期造成的,則需要重頭開始用帳號密碼請求登錄勾缭。

用戶界面聊天流程:

Paste_Image.png

消息列表的實時更新流程類似2揍障,要先訂閱allNewMessage

協(xié)議和接口:

統(tǒng)一采用json文本形式,utf-8編碼后傳輸俩由。
json對象必須包含head屬性作為固定接口的秒數毒嫡,data屬性指明傳輸的參數數據,data屬性的數據類型可能為單一類型(字符串采驻、數字审胚,布爾型用1和0替代),也可能是一個對象或數組礼旅。

關于加密

  • 雙方用登錄時交換的des對稱性密鑰進行加解密
  • 加密的接口要附加secret屬性膳叨,設置值為1,接收方根據該屬性判斷是否需要解密
  • 只對data的json字符串加密痘系,在用base64編碼成可傳輸的字符串菲嘴,最終的json對象效果如下:
    {
    head:{
    action: "actionName",
    secret: 1
    } ,
    data: "base64 string"
    }
  • 目前只需要對帶有聊天內容的data加密

登錄請求

  • 方向:客戶端 >> 服務端
  • 內容:JSON(注意下面只是解析后的對象,并非實際傳輸的JSON字符串):
    {
    head: {
    action: "login"
    },
    data: {
    userId:"ksoeufjgkwqoeitkdjgkdlgpekfjdlgd",
    password:"KDSJEHWKR"
    }
    }
  • 說明:必須在建立socket連接后3秒內發(fā)送汰翠,否則服務端將自動關閉socket連接龄坪,掉線后需要重新建立連接。

登錄確認結果

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "loginRes",
    data:
    {
    result:1, // 1成功 2 密碼驗證失敗 3 密鑰驗證失敻椿健(可能服務器重啟導致所有會話丟失)
    key:"rsa公鑰"
    }
    }
  • 說明:rsa公鑰用于加密客戶端發(fā)給服務端的des密鑰健田,des密鑰用于敏感的數據加密解密,如聊天消息佛纫。如果是重連妓局,則不包含key

客戶端密鑰

  • 方向:客戶端 >> 服務端
  • 內容:
    {
    action: "secretKey",
    data:"加密過的des密鑰" // 加密過的des密鑰
    }
  • 說明:保留該加密過的des密鑰,還可以用來重新快速登錄

心跳通知

  • 方向:客戶端 >> 服務端
  • 內容:
    {
    action:"keepAlive"
    }
  • 如果掉線呈宇,服務端保留最多一小時的訂閱狀態(tài)和密鑰好爬,在一小時內realive即可快速恢復,否則需要重頭登錄和訂閱甥啄。

重新快速登錄

  • 方向:客戶端 >> 服務端
  • 內容:
    {
    action: "realive",
    data:"剛才加密過的des密鑰" // 剛才加密過的des密鑰
    }
  • 返回接口loginResult存炮,如果驗證失敗,則要重頭開始登錄和訂閱(服務器會話丟失)

發(fā)送聊天消息

  • 方向:客戶端 >> 服務端

  • 內容:
    {
    action:"sendMessage",
    data:{
    id: 3939393939, // 消息ID蜈漓,整型(客戶端生成:時間毫秒值*10000+隨機數(0~9999)組合)
    receiver: "ksoeufjgkwqoeitkdjgkdlgpekfjdlgd", // 目標用戶ID
    type: 0, // 0 默認為文本穆桂,1為圖片
    content:""http:// 如果是圖片,則內容為圖片縮略圖的URL
    fileSuffix: ".txt", // 如果是圖片融虽,則必須有該屬性充尉,文件后綴名包含.點號
    fileSource: "", // 如果是圖片,則必須有該屬性衣形,高清圖的地址
    }
    }

  • 說明:圖片要預先上傳到七牛,七牛的key格式為: /im/{userId}/{message id}

發(fā)送聊天消息結果

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "sendMessageResult",
    data: {
    id: 3939393939, // 消息ID,這個是客戶端生成的ID
    type: 1 // 表示已被服務器接收谆吴,但還未轉發(fā)給目標用戶倒源,2表示已被目標用戶接收
    }
    }

訂閱實時消息

  • 方向:客戶端 >> 服務端
  • 內容:
    {
    action: "subscribe"
    data: {
    type: "userMessage", // userNewMessage | allNewMessage
    target: "用戶ID" // 如果是userMessage,則顯示是該用戶ID
    }
    }

訂閱實時消息成功

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "subscribeSuccess",
    data: {
    type: "userMessage", // userNewMessage | allNewMessage
    target: "用戶ID" // 如果是userMessage句狼,則顯示是該用戶ID
    }
    }

取消訂閱消息

  • 方向:客戶端 >> 服務端
  • 內容:
    {
    action: "unsubscribe"
    data: {
    type: "userMessage", // userNewMessage | allNewMessage
    target: "用戶ID" // 如果是userMessage笋熬,該參數是必須的
    }
    }

取消訂閱實時消息成功

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "unsubscribeSuccess",
    data: {
    type: "userMessage", // userNewMessage | allNewMessage
    target: "用戶ID" // 如果是userMessage,則顯示是該用戶ID
    }
    }

請求聊天記錄

  • 方向:客戶端 >> 服務端
  • 內容:
    {
    action: "requestChatHistory",
    data:{
    userId: "目標用戶ID",
    endTime: "截至時間(不包含)", // 默認當前時間
    beginTime: "初始時間(包含)", // 可為空
    maxRecord: 50, // 默認50條最新記錄
    }
    }

接收歷史消息

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "receiveChatHistory",
    data:[{
    sender: "發(fā)送人的用戶ID",
    id: 3939393939, // 消息ID腻菇,整型(客戶端生成:時間毫秒值*10000+隨機數(0~9999)組合)
    type: 0, // 0 默認為文本胳螟,1為圖片
    content:""http:// 如果是圖片,則內容為圖片縮略圖的URL
    fileSuffix: ".txt", // 如果是圖片筹吐,則必須有該屬性糖耸,文件后綴名包含.點號
    fileSource: "", // 如果是圖片,則必須有該屬性丘薛,高清圖的地址
    read:1, // 是否已讀嘉竟,已讀
    }]
    }

實時接收未讀消息(聊天界面)(需要訂閱)

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action:"receiveUserNewMessage",
    data:{
    sender: "ksoeufjgkwqoeitkdjgkdlgpekfjdlgd", // 發(fā)送者用戶ID
    list: [{
    id: 3939393939, // 消息ID,整型(客戶端生成:時間毫秒值*10000+隨機數(0~9999)組合)
    type: 0, // 0 默認為文本洋侨,1為圖片
    content:""http:// 如果是圖片舍扰,則內容為圖片縮略圖的URL
    fileSuffix: ".txt", // 如果是圖片,則必須有該屬性希坚,文件后綴名包含.點號
    fileSource: "", // 如果是圖片边苹,則必須有該屬性,高清圖的地址
    }, ....]
    }
    }

實時接收新消息的簡要(消息列表)(需要訂閱)

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "receiveAllNewMessage",
    data:[
    {
    sender: {
    userName: "用戶名"裁僧,
    headImg: "頭像",
    userId: "用戶ID"
    },
    newest: {
    id: 3939393939, // 消息ID个束,整型(客戶端生成:時間毫秒值*10000+隨機數(0~9999)組合)
    type: 0, // 0 默認為文本,1為圖片
    content:""http:// 如果是圖片锅知,只顯示【圖片】播急,如果文本過長,會自動截斷最多50個字符
    }, // 最新一條消息
    unread: 10, // 累計未讀消息總數
    },....]
    }

實時接收用戶在線狀態(tài)

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "receiveUserState",
    data:{
    userId: "",
    userName: "",
    headImg, "",
    online: 1, // 在線售睹,0不在線
    }
    }

發(fā)送未讀消息接收成功

  • 方向:服務端 >> 客戶端
  • 內容:
    {
    action: "sendReadMessageSuccess",
    data: [3939393939,...] // 消息ID數組
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末桩警,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昌妹,更是在濱河造成了極大的恐慌捶枢,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飞崖,死亡現(xiàn)場離奇詭異烂叔,居然都是意外死亡,警方通過查閱死者的電腦和手機固歪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門蒜鸡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胯努,“玉大人,你說我怎么就攤上這事逢防∫杜妫” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵忘朝,是天一觀的道長灰署。 經常有香客問我,道長局嘁,這世上最難降的妖魔是什么溉箕? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮悦昵,結果婚禮上肴茄,老公的妹妹穿的比我還像新娘。我一直安慰自己旱捧,他們只是感情好独郎,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枚赡,像睡著了一般氓癌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贫橙,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天贪婉,我揣著相機與錄音,去河邊找鬼卢肃。 笑死疲迂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的莫湘。 我是一名探鬼主播尤蒿,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼幅垮!你這毒婦竟也來了腰池?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忙芒,失蹤者是張志新(化名)和其女友劉穎示弓,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體呵萨,經...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡奏属,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了潮峦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囱皿。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡勇婴,死狀恐怖,靈堂內的尸體忽然破棺而出铆帽,到底是詐尸還是另有隱情咆耿,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布爹橱,位于F島的核電站,受9級特大地震影響窄做,放射性物質發(fā)生泄漏愧驱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一椭盏、第九天 我趴在偏房一處隱蔽的房頂上張望组砚。 院中可真熱鬧,春花似錦掏颊、人聲如沸糟红。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盆偿。三九已至,卻和暖如春准浴,著一層夾襖步出監(jiān)牢的瞬間事扭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工乐横, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留求橄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓葡公,卻偏偏與公主長得像罐农,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子催什,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理涵亏,服務發(fā)現(xiàn),斷路器蛆楞,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 國家電網公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數據交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,005評論 6 13
  • 一溯乒、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,373評論 6 152
  • 隨手寫的情書,回看時怦然心動
    甜蜜姑娘閱讀 231評論 0 1
  • 今天的太陽很大豹爹,陽光刺眼裆悄,我走出地鐵站的時候忍不住抬手擋在眼睛上方。 小梅抱怨著臂聋,化作一縷輕煙鉆進我的口袋里光稼。 我...
    _桃止閱讀 189評論 2 6