原创 遊戲微服務架構設計:異步回調

在處理客戶端請求時,需要立即返回,把一些工作交給後臺線程執行時,就會需要用到異步回調。 在node.js中使用async很美,例如: async.waterfall([ function(callback) {

原创 NATS中文文檔:序列號

一對多消息的一個常見問題是,由於網絡故障,消息可能丟失或丟棄。解決這種情況的一個簡單模式是在消息中包含序列id。接收者可以檢查序列id以查看是否遺漏了任何內容。在沒有新數據的情況下,序列號與心跳信號結合,形成了一個強大而有彈性的模

原创 NATS中文文檔:請求與應答

請求-應答是現代分佈式系統中常見的一種模式。一個請求被髮送,應用程序要麼等待具有特定超時的響應,要麼異步接收響應。現代系統日益複雜,要求具有位置透明、上下縮放、可觀測性等特性。許多技術需要額外的組件、sidecars模式和代理來完

原创 NATS中文文檔:消息回覆

在一個最多隻有一次語義的系統中,有時會丟失消息。如果您的應用程序正在執行請求-答覆,它應該使用超時來處理任何網絡或應用程序故障。對請求設置超時並使用處理超時的代碼總是一個好主意。發佈事件或數據流時,確保消息傳遞的一種方法是將其轉換

原创 NATS中文開發文檔:接收消息

通常,應用程序可以異步或同步接收消息。使用NAT接收消息依賴於庫的實現。 一些語言,如Go或Java,提供同步和異步api,而另一些語言可能只支持一種類型的訂閱。 在所有情況下,訂閱過程包括讓客戶端庫告訴NATS系統應用程序對某個

原创 NATS中文開發文檔:監控連接

管理與服務器的交互主要是客戶機庫的工作,但大多數庫也提供了一些對幕後發生的事情的瞭解。 例如,客戶端庫可以提供一種機制來獲取連接的當前狀態: nc, err := nats.Connect("demo.nats.io", nats

原创 NATS中文開發文檔:連接

NATS系統通常由一個帶有nats或tls協議的標準URL標識,例如nats://demo.nats.io。NATS系統可以是單個服務器、小型集羣或全局超級集羣。在這些示例中,我們將依賴nats.io提供的單個測試服務器,位於na

原创 NATS中文開發文檔:發送消息

NATS使用包含目標主題、可選回覆主題和字節數組的協議發送和接收消息。有些庫可以提供幫助程序來將其他數據格式轉換爲字節或從字節轉換爲字節,但是NATS服務器將把所有消息視爲不透明的字節數組。 所有的NATS客戶機都是爲了簡化消息的

原创 開源一個服務端遊戲開發框架

本人也是因爲go的魅力從原來的node.js轉go開發的,但並沒有放棄node.js開發。node.js開發起來極爲舒服,誰用誰知道。go的性能,併發,靜態編譯速度還是更令人着迷,在雲計算,區塊鏈等未來領域的發展也是極爲看好。 之

原创 三分鐘讀懂ZeroMQ

爲什麼需要ZeroMQ ZeroMQ可以分開來看Zero MQ,MQ就是Message Queue消息隊列。Zero是零,它代表零中間件(None-Broker)、零延遲,同時,它又有了新的含義:零管理、零成本、零浪費。總的來說,

原创 遊戲微服務架構設計:掛機類遊戲

掛機類遊戲如何做分佈式? 遊戲分五類節點設計: Gate 這個連接用來做負載均衡,只是爲了獲取連接服的連接地址用,客戶端連接後,拿到連接服的IP和端口就斷開。其中,如何選擇連接服的策略可以是隨機、輪詢、加權重等。 Connect

原创 遊戲微服務架構設計:io遊戲

什麼是io遊戲,就是一類的開房間小遊戲。如《野蠻人大作戰》。 這種遊戲怎麼做分佈式? Gate 這個連接用來做負載均衡,只是爲了獲取連接服的連接地址用,客戶端連接後,拿到連接服的IP和端口就斷開。其中,如何選擇連接服的策略可以是

原创 go語言:帶緩衝和不帶緩衝通道的區別

不帶緩衝的通道 這種類型的通道要求發送 goroutine 和接收 goroutine 同時準備好,才能完成發送和接收操作。 package main import ( "fmt" "time" ) func main()

原创 go語言:內嵌二義性(ambiguous selector )

內嵌兩個結構體中有相同字段會發生二義性。 先看代碼: package main import "fmt" type Shape struct { id int } type Object struct { id int

原创 go語言:給map上鎖

map不是goroutine safe的,在多goroutine併發時需要上鎖。 不上鎖會出現什麼問題呢? 資源競爭:會出現髒讀,丟失更新等一系列狀況。如讀到的是舊數據或是讀出來的對象已經被刪除了,引發panic。 鎖用的不對會發