網絡越來越好,手機之間的互動已經是常态,王者榮耀、微信實時視訊等,已經将多屏互動推到各到各種應用場景。
為了讓大家能清楚地了解多屏互動,我将結合執行個體對移動裝置實時通信進行研究,并系統性地呈現一些解決方案。
最開始,我嘗試給大家展示如何建立一個最簡單的點對點通信。
萬事開頭難,先假定一下需求:
區域網路内通信。
寫一個你看我畫的程式。
純用戶端(一開始,我不打算讓伺服器參與)。
下面對需求進行進一步的分析。
從原型上看,我們的流程應該是下圖的形式。
下面我們進行架構設計與開發選型了。
基于前文的需求假定進行簡單設計網絡模型,我将目标的網絡分拆成3層:
對應的開發架構應該是這樣的
基于實時通信的高效性,我将底層庫的開發語言選擇了C++,協定格式選擇為二進制,網絡層協定選擇UDP(後面會有切換TCP的選擇)。
通信協定端口我選擇12000.
字段
注解
底層庫開發語言
C++
協定格式
二進制
網絡層協定
UDP
通信端口
12000
下面我将開始搭建底層庫(寫到這裡還是一行代碼都沒寫,不過現在是國慶節,既然有時間那就開始搞吧)。
工程目錄如下
我設計的busi頭檔案,給上層調用的。(詳細的見 github)
花了半天的時間寫完了底層庫,先來測試一下底層庫的連通性,我寫了一個程試程式,隻列下核心檔案, 詳細請看github上。
因為我有一台mac, 一個ubuntu,所有測試時候,2邊都要編譯,mac是用xcode比較簡單,ubuntu上編寫makefile
framework:
test
生成的程式如下:
現在我們來實測一下連通性:
我讓mac做主動連接配接的一方,讓linux做被動連接配接。
然後試着各自問候一下吧
可以看到2者已經通了,咱們的底層庫搭建OK!
感興趣并助喜歡動手同學,可以 下載下傳代碼 實測一下。
為了友善調試,我選擇開發一個mac版的你看我畫。
在xcode上建立一個spritekit工程
在storyboard上加入按鈕元素并綁定ViewController中的變量。
framework為底層庫,util為工具目錄,adaptor為适配層。
建立一個自定義的view用來實作繪畫。
在實作上我用最簡單的繪圖API, 不過為了區分對手與我畫的,我用了2種顔色。
設定自定義滑鼠響應事件
并在代碼裡建立1個scene用于加載自定義view.
object c 調用原生C++,我的做法是加一層代理。
我将代碼結構設計如下
含義
CoreData
應用層協定結構
CoreAdaptor
object c 适配
CoreDelegate
代碼接口
Core
c++适配
在開發的時候,我希望上層在發送消息時,不需要指定IP與端口,而隻需要索引就行,是以在framework層
建立一個 位址與索引的對應關系。
是以适配層調用接口隻需要指定index就行了
結合之前設計的流程圖,這個遊戲過程的生命周期用viewcontroller 中的代碼表示如下:
是以最終連接配接建立要麼在confirm後,要麼在onConfirm後。
start函數其實隻是負責切換到畫圖場景
OK,整體代碼寫完後,我們來示範一下效果。
先看下截圖
明天我上傳下視訊,我畫的有點醜,不過沒關系,大家可以上github上拉下來自己畫。
<a href="https://github.com/70207/draw.git">https://github.com/70207/draw.git</a>