railgun單個伺服器APP的結構

2021-07-24 21:00:24 字數 2567 閱讀 1622

紅色模組表示此模組可有可無

黃色模組表示是至少要有乙個

藍色模組表示一定要有

(1)(2)(3)(5)

模組,是有

(1)(3)(5)

模組,

一般業務模組是必有(2)(3)(5)模組,

(4)(6)

模組如果需要連資料庫就會有不連資料庫就沒有

tcpmanager.go:

每accepttcp()成功乙個

remote

連線就新建乙個

structconnectionsession會話,每個會話新建兩個goroutine協程,乙個recvpackege()協程用於接收來自remote的訊息,乙個sendpackege()協程用於向remote傳送訊息

connectionsession.connid是這個會話的唯一識別符號

connectionsession.msgwritech是sendpackege()使用的

channel,

當需要向remote傳送訊息時msgpool層會向connectionsession.msgwritech推送訊息

dealstickpkg.go:

處理粘包的原始檔

dialmanager.go:

在開始以remote的身份去嘗試連線某個

ip位址,連線成功後就新建乙個connectionsession會話,其他部分與tcpmanager.go相似

msgpool.go:

main()

進入後就是直接操作這個singlemsgpool型別的物件

有,業務

一般沒有必要有

進行相互通訊的

都要有,因為都需要通過

來**

singlemsgpool.bindingdbprocess是繫結的資料庫**,如果有資料庫操作那麼會有這個物件,反之沒有。

singlemsgpool.bindinglogicprocesses是繫結的業務邏輯處理物件,這個是程式猿根據自己的業務需求寫的,這個必須要有。可以說singlemsgpool與bindinglogicprocesses事實上是一體的

ps:singlemsgpool.bindingdbprocess和singlemsgpool.bindinglogicprocesses都是slice型別,如果有資料庫操作的話,這兩個成員變數的

len()

長度相等,一般來說是大於

1的,因為資料庫操作通常

io較慢會阻塞需要多個協程併發操作。

小結:如果有資料庫操作(3)(4)模組均存在,就需要宣告

2個singlemsgpool型別的變數。

沒有資料操作就只有(3)存在,只需要宣告

1個singlemsgpool型別的變數。

agent.go:

實際上有4個

struct

型別,現在都放在一起了,可能不太直觀,將來應該會把這個檔案拆分成多個

.go檔案

隨便簡單說一下,後面在應用舉例時會詳細介紹

main.go:

入口函式檔案,這裡在將各種agent和

process

繫結到msgpool

上,並啟動執行

msgpool

privatemsg.go:

protobuf

是不能定義指標型別的。私有報文的最大的作用是可以定義指標型別,私有報文是不用於跨

傳輸的,即不傳送到

,每個根據自己的實際業務需求定義

***msgfilter.go:

這個檔案用於報文過濾,只處理業務邏輯模組需要的報文,其他報文丟棄

***logic.go:

主業務邏輯**檔案

***dblogic.go:

資料庫業務邏輯**檔案

都是和protobuf報文相關的原始檔

publicfun.go,setbaseinfo.go

手寫,其他原始檔都是由

protobuf

工具自動生成

publicfun.go:

一些公共函式,其實與proto不太相關了,將來如果公共函式多了,可能會另外建乙個目錄和

package

setbaseinfo.go:

對報文的.base成員變數進行操作的函式,這裡每個proto的報文都會有

.base

的成員變數,裡面包含著報文的大類

id,小類id,

connid

等基本資訊,bs_types.baseinfo型別的.base成員變數會在後面的報文篇裡詳細說明

app 與伺服器互動 token

1.產生原因 cookie session 的實現方式 cookie 的實現方式是瀏覽器本身支援伺服器端向瀏覽器寫入鍵值對資料,當然客戶端可以禁止伺服器向客戶端寫入 cookie。session 的實現方式是根據客戶端的請求來找出當前客戶端在伺服器端的存放資訊,有兩種實現方式 1.使用 cookie...

APP呼叫伺服器API設計

2 傳送其他請求時將引數按約定排序 加上timestamp 用來判斷token是否超時 token引數 加上secret進行md5加密sign簽名,這樣別人無法偽造修改url 和web系統的區別?瀏覽器請求每次都會帶上cookie,效率低 資料報被監聽重放攻擊?關於防止重放攻擊,目前主流做法,要求通...

樹莓派之安裝SVN伺服器 上篇 單個專案

一台伺服器上部署多個svn專案,敬請期待下篇 樹莓派上面的svn伺服器比較簡單,而這種級別的svn一般情況下適用於小於20人的團隊或者研發場景,再多的話,估計會感覺比較卡,其實主要是樹莓派自身效能瓶頸決定的。好了開始我們的安裝過程 sudo apt get install subversion mk...