原创 go-micro examples 中stream 代碼學習(流 服務及 結合瀏覽器websocket的使用)

對應 examples/stream 例子: 這個例子, 有 一個 streaming 服務, 和兩個 client, 一個是 streaming rpc , 一個是 js websockets  + web services (stre

原创 grpc-ecosystem/grpc-gateway 基本概念和原理 / 實現網關和微服務

目標:簡單微服務+ grpc-ecosystem/grpc-gateway; https://github.com/grpc-ecosystem/grpc-gateway https://grpc-ecosystem.github.io/

原创 swoole微服務/EasySwoole微服務實踐 一:網關和服務基礎搭建

利器/原則: 文檔也不是面面俱到!看源碼啊!必須看源碼!當然不想看源碼的,可以加入作者的VIP羣,哈哈。   點贊 收藏 分享 文章舉報 學海無涯書山有路 發佈了161 篇原創

原创 go-micro examples 中service 代碼學習(開發基於go-micro的微服務)

這是一個 創建 微服務 的例子:https://micro.mu/docs/cn/writing-a-go-service.html 目錄如下: greeter.proto 代碼如下: syntax = "proto3"; serv

原创 go-micro examples中broker &event &pubsub 學習(broker發佈訂閱 & micro api Event + micro 訂閱 & )

  examples/broker :  micro/go-micro/broker  發佈訂閱; examples/event :  curl 觸發 event   +   micro api --handler=event  +   

原创 yii2.0框架

圖片生成有"yiisoft/yii2-imagine": "~2.1.0", 庫, 安裝: sudo curl -O ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz

原创 Linux下安裝php7.0,php7.1,php7.2,php5.6; 安裝擴展xdebug-2.7.2; 安裝擴展redis-4.3.0;(懷疑人生的一次安裝經歷!)

./configure --enable-fpm --prefix="/alidata/server/php7.0.33" --with-config-file-path="/alidata/server/php7.0.33/etc/"

原创 Go併發模式/設計模式-重啓異常的goroutine

在長期運行的後臺程序中, 如果沒有外部干涉,一個goroutine 很容易進入一個不正常的狀態,並且無法恢復。 在一個長期運行的程序中,建立一個機制來 監控 goroutine 是否 是健康的的狀態 是有用的, 當它們變得異常時, 就可

原创 Go併發模式/設計模式之複製請求

複製請求 程序正在處理 用戶的HTTP請求, 或者檢索一個數據塊。你可以將請求分發到多個處理程序(無論是 goroutine ,進程, 還是服務器),其中一個將比其他 處理程序返回更快,可以 立即返回結果。 下面例子 在 單個進程中,

原创 Go併發模式/設計模式之心跳

心跳是 併發進程向外界發出信號的一種方式 兩種不同類型的心跳: 1。 在一段時間間隔內發出的心跳 2。 在工作單元開始時發出的心跳。 func main() { doWork := func(done <-chan interfa

原创 Go併發模式之異常

出現異常表示着 系統 進入了 一個無法滿足用戶操作的狀態,這個操作可能是顯式的, 也可能是隱式的。 這是需要傳達一些信息: 1。 發生了什麼 : 對異常事件的描述 2。 發生在什麼時間, 什麼位置 : 異常還應該包含 棧軌信息;異

原创 Go併發模式之隊列

帶緩存的 channel, 其實就是一種隊列。 引入隊列,通常是優化程序時希望採用的最後一種技術之一。預先添加隊列可以隱藏同步問題,例如死鎖,和活鎖。 常見錯誤認識: 引入隊列來嘗試解決性能問題,隊列幾乎不會加速程序的總運行時間,它只

原创 Go併發模式之橋接channel(bridge channel)

作爲channel 消費者 不關心其值來自一系列的channel的事實。這種情況下處理一個充滿channel的 channel這種情況很多。 我們可以做的是 : 將充滿channel的channel 拆解爲一個簡單的channel f

原创 Go併發模式之將channel一分爲二(tee channel)

想把一個channel 一變二;以便 將它們發送到 代碼的兩個不同獨立區域中。 func main() { tee := func(done <-chan interface{}, in <- chan interface{})(

原创 Go併發模式之如何很好很強大讀取channel(orDone函數)

我需要從 一個channel中讀取數據; 這個channel 我不能對他行爲(如: 什麼時候被close(),被取消)做出假設, 可以 range 讀取(但是 總要判斷 true 才能使用他返回的值,不爽!); for val := r