1. 程式人生 > >GGTalk即時通訊系統(支援廣域網)終於有移動端了!(技術原理、實現、原始碼)

GGTalk即時通訊系統(支援廣域網)終於有移動端了!(技術原理、實現、原始碼)

      首先要感謝大家一直以來對於GGTalk即時通訊系統的關注和支援!GGTalk即時通訊系統的不斷完善與大家的支援分不開! 從2013年最初的GG1.0開放原始碼以來,到後來陸續增加了網盤功能、遠端協助功能、離線檔案功能、群聊功能、語音聊天功能、視訊聊天功能、以及視訊錄製功能、和增加了資料庫——一路走來,結識許多朋友,大家不僅對GGTalk即時通訊系統的原始碼提了許多寶貴的建議,我還有幸與某些朋友取得了專案上的合作,這一切都是美妙的緣分!

      一直以來,GGTalk即時通訊系統的移動端始終是一個缺憾。前段時間剛好結識了一位做android開發的朋友,他也很有興趣參與,於是GGTalk即時通訊系統的移動端也藉此契機而誕生了!

      本文我主要是想為大家介紹一下打通PC端和移動端背後的基本原理,並以GGTalk即時通訊系統的android版作為示例demo供大家參考。當然,這個demo只是完成了GGTalk客戶端全部功能的一小部分,以後我們會陸續將更完善的版本分享給大家。   

      想要直接下載體驗的朋友請點選:

一.先睹為快

    本次的GGTalk即時通訊系統安卓demo已實現如下功能:

(1)登入服務端

(2)文字聊天,表情圖片,訊息提醒

(3)好友列表

(4)顯示好友線上狀態

(5)檔案傳輸       

         

      

二.基本原理

      打通不同平臺的客戶端中間相互通訊,需要滿足以下幾個條件:

1. 使用同一個公共的伺服器進行資料中轉。

       在GG中,我們.NET的PC端和android移動端都是使用基於.NET開發的GG服務端作為伺服器。

2. 通訊訊息的格式必須達成一致。

        一般來說,使用文字協議(比如xml)是非常方便的,但是文字協議有兩個主要缺陷:

(1)訊息個頭大,浪費頻寬。

(2)傳遞二進位制資料不方便。比如,傳檔案這樣的功能,檔案的本質是byte[],文字訊息表達byte[]就很麻煩。

        GG使用的不是文字協議,而是二進位制協議,這樣,在開發android端時,就需要遵循GG現有的訊息格式,才能與GG進行正常的通訊。

3. 注意不同平臺上的位元組序的轉換。

        比如,android / Java 採用的是big endian,而windows /.NET採用的是little endian。

三.協議格式

       二進位制協議,又叫“流協議”,流協議規定網路上傳遞的任何一個訊息必須符合以下規則:

(1) 訊息由“訊息頭”(Message Header)和“訊息體”(Message Body)構成,訊息體可以為空。

(2) 訊息頭的長度是固定的。 

(3) 訊息頭中至少直接或間接包含了一個資訊,那就是訊息體的長度。

(4) 如果有訊息體,則訊息體必須緊接在訊息頭的尾部。

     GG使用緊湊的二進位制序列化器,來完成流(byte[])與協議物件(Contract object)之間的相互轉換。在開發GG移動端的某個功能時,首先得實現將這個功能對應的協議物件按照緊湊的二進位制協議格式序列化到流中。比如,在GG移動端登入時,會從伺服器獲取當前登入使用者的基本資訊,這些資訊在GG中使用GGUser類封裝,伺服器會把GGUser物件採用緊湊的二進位制序列化器進行序列化得到byte[],傳遞給移動端,移動端就需要按協議格式來解析這個byte[],將其還原成GGUser物件。GGUser類的結構如下:

     

     其對應的協議格式如下所示:

     

     這個協議格式可以使用協議格式工具ContractFormatGenerator自動生成。協議格式中各個列的含義解釋如下: 

(1)FieldName:欄位的名稱。欄位名稱一般與協議類的屬性名是對應的,如果某個屬性的型別的長度是可變的(比如string),那麼就要先加一個Field,來描述這個屬性值轉換給位元組後的長度。

(2)Type:Field的型別。

(3)StartOffset:當前Field在byte[]中的起始偏移。

(4)Length:當前Field的值的長度。

     要注意,協議格式中,第一個int是一個長度(GGUserLen),用來記錄當前協議類序列化後的總長度(這個int的4個位元組也包含在內) 。

     至於協議類與流之間的相互轉換細節,大家可以下載GG安卓版的原始碼詳細研究,在此就不贅述了。

四.GGTalk即時通訊系統原始碼放送

     下載最新版本,請轉到這裡

大家有什麼問題和建議,敬請留言,也可以傳送email到我郵箱:[email protected]。 

如果大家覺得還不錯,請粉我,順便再頂一下啊!

相關推薦

GGTalk即時通訊系統支援廣域網終於移動技術原理實現原始碼

      首先要感謝大家一直以來對於GGTalk即時通訊系統的關注和支援!GGTalk即時通訊系統的不斷完善與大家的支援分不開! 從2013年最初的GG1.0開放原始碼以來,到後來陸續增加了網盤功能、遠端協助功能、離線檔案功能、群聊功能、語音聊天功能、視訊聊天功能、以及視訊錄製功能、和增加了資料庫——一路走

可在廣域網部署執行的即時通訊系統 -- GGTalk總覽原始碼下載

    (最新版本:V6.0,2017.12.11 。即將推出Xamarin移動端版本,包括 Android 和 iOS)        GGTalk開源即時通訊系統(簡稱GG)是QQ的高仿版,同時支援區域網和廣域網,包括客戶端(PC客戶端、android移動端)、服務端、資料庫。從2013年最初的GG1.

即時通訊系統實現聊天訊息加密,讓通訊更安全【低調贈送:C#開源即時通訊系統支援廣域網——GGTalk4.5 最新原始碼

  在即時通訊系統(IM)中,加密重要的通訊訊息,是一個常見的需求。尤其在一些政府部門的即時通訊軟體中(如稅務系統),對即時聊天訊息進行加密是非常重要的一個功能,因為談話中可能會涉及到機密的資料。我在最新的GG 4.5中,增加了對即時聊天訊息進行加密的功能,但這一功能並不是強制的,可以通過開關來進行控制。本文

國產化即時通訊系統開發 -- 使用Avalonia實現GGTalk的UI介面LinuxUbuntuUOS中標麒麟

距離2013年開源GGTalk以來,7年已經過去了,GGTalk現在有了完整的PC版、安卓版、iOS版(即將釋出),以及Xamarin版本。 然而,時代一直在變化,在今天,有個趨勢越來越明顯,那就是政府系統將逐漸遷移到Linux以及國產化的作業系統和資料庫上面來。 所以,GGTalk也將隨順這一必然的趨勢,服

Netty實戰 IM即時通訊系統客戶啟動流程

## Netty實戰 IM即時通訊系統(五)客戶端啟動流程 零、 目錄 IM系統簡介 Netty 簡介 Netty 環境配置 服務端啟動流程 實戰: 客戶端和服務端雙向通訊 資料傳輸載體ByteBuf介紹 客

Netty實戰 IM即時通訊系統服務啟動流程

## Netty實戰 IM即時通訊系統(四)服務端啟動流程 零、 目錄 IM系統簡介 Netty 簡介 Netty 環境配置 服務端啟動流程 實戰: 客戶端和服務端雙向通訊 資料傳輸載體ByteBuf介紹 客

Netty實戰 IM即時通訊系統Netty環境配置

## Netty實戰 IM即時通訊系統(三)Netty環境配置 零、 目錄 IM系統簡介 Netty 簡介 Netty 環境配置 服務端啟動流程 實戰: 客戶端和服務端雙向通訊 資料傳輸載體ByteBuf介紹

Netty實戰 IM即時通訊系統Netty簡介

## Netty實戰 IM即時通訊系統(二)Netty簡介 零、 目錄 IM系統簡介 Netty 簡介 Netty 環境配置 服務端啟動流程 實戰: 客戶端和服務端雙向通訊 資料傳輸載體ByteBuf介紹 客

Netty實戰 IM即時通訊系統IM系統簡介

## Netty實戰 IM即時通訊系統(一)IM系統簡介 零、 目錄 IM系統簡介 Netty 簡介 Netty 環境配置 服務端啟動流程 實戰: 客戶端和服務端雙向通訊 資料傳輸載體ByteBuf介紹 客戶

一個海量線上使用者即時通訊系統IM的完整設計

CSDN部落格有圖片大小限制,有些圖片無法顯示,可檢視微信公眾號中原文。 1 伺服器端設計 1.1 總體架構 總體架構包括5個層級,具體內容如下圖。 1.1.1 使用者端 移

急急如律令火速搭建一個C#即時通訊系統原始碼分享——高度可移植

1 void tcpPassiveEngine_MessageReceived(IPEndPoint userAddress, byte[] msg) 2 { 3 //取出訊息型別 4 int msgType = BitCon

數字資產交易管理即時通訊平臺,區塊鏈IM即時通訊系統開發數字資產交易

區塊鏈 watermark 客戶 架構設計方法 這一 jpg src 比特 得到 從幣圈玩家的角度來看數字資產交易所的即時通訊問題,一直都存在著巨大的鴻溝。溝通難的問題一直沒有得到解決,之前對於客戶關系管理或者用戶與用戶之間都只是建立以論壇或者交易所聊天框的形式進行溝通。為

區塊鏈IM即時通訊系統APP開發多幣種錢包開發

一鍵分享 集合 培訓 動向 hang 數字 聊天 全球 不出 區塊鏈發展到現在,已經進入白熱化階段,許多地方都開設了區塊鏈相關課程與培訓機構,形成了業態中的社區化發展,從而也誕生了區塊鏈IM即時通訊系統【開發+微信號yzrhuhang】在圈子中盛行起來。為幣圈鏈圈社區的用戶

區塊鏈資產交易所搭建IM即時通訊系統開發

競爭 全球 演進 模式 結合 數字資產 傳統 搜索 早期 區塊鏈資產交易所搭建IM即時通訊系統開發 [本文由源中瑞塗先生編輯/交易所開發VX搜索:ruiec999]隨著數字資產交易市場的演進和機構投資者的參與,交易所領域創業面臨的合規、安全、專業、透明等問題也逐漸成為其新的

區塊鏈IM即時通訊系統app開發,直播軟件開發

即時通訊 金融 結合 研發 cto 交流 text blog 系統 區塊鏈IM即時通訊系統app開發,直播軟件開發 區塊鏈IM即時通訊系統是通過即時通訊技術來實現在線聊天、交流的系統軟件。而區塊鏈IM及時通訊系統則是一款集合了社交與錢包儲存等多功能的一套系統。 區塊鏈IM即

mqtt協議實現即時通訊-activemq nginx.支援JS,JAVA,微信小程式

MQTT協議通訊   簡述:            使用MQTT協議實現後臺推送、及時通訊等功能。本案例實現了web-js端、微信小程式端、Java client端、Java serv

企業即時通訊系統--BigAnt

一、中文官網 https://www.bigant.cn/downloads/v5.html   該套軟體包括服務端,客戶端(安卓,蘋果,PC,Mac)   二、英文官網 https://www.bigantsoft.com/downlo

企業即時通訊系統--InsMsg

官網:http://www.insmsg.com/cn/index.php 該套軟體,完全免費且使用者數不限制。 下載地址:http://www.insmsg.com/cn/download.php 完整包下載:http://www.insmsg.com/cn/dl/InsMsgA

[原始碼和文件分享]使用同一資料庫基於TCP Socket和Websocket實現的相互即時通訊系統

摘 要 隨著網路通訊和計算機技術的發展,人們越來越希望能夠即時傳送和接收網際網路訊息。與此同時隨著網際網路的發展在HTML5中提出了websocket協議,能更好的節省伺服器資源和頻寬並且伺服器和瀏覽器能夠雙向實時通訊。為了能讓使用者體驗傳統客戶端和web帶來的即時通訊結合的超爽體驗,本次畢業設

如何親手搭建一個分散式 IM(即時通訊) 系統

前言 老讀者應該還記得我之前分享過一篇《設計一個百萬級的訊息推送系統》;雖然我在文中有貼一些虛擬碼,依然有些朋友希望能直接分享一些可以執行的原始碼;這麼久了是時候把坑填上了。 目錄結構: 本文較長,高能預警;帶好瓜子板凳。