【輕知識】跑grpc的一個demo——Building APIs with GRPC, PHP, and Golang
文章的名字以別人的文件來命名,上週晚上一邊泡腳一邊搜資料,無意間在speakerdeck搜關於php microservice的東西搜到了一個文件 ofollow,noindex">《Building APIs with GRPC, PHP, and Golang》 。感覺挺有意思的。就想著跑起來。把這個程式碼。 作者demo
科學上網環境
我也是一遍安裝一遍弄好了v-p-n。
Composer、Pecl、go get 都需要代理。
ShadowSocks客戶端+privoxy搞定了科學上網( Ubuntu下SS(ShadowSocks)搭建 )。
啟動
ssr+privoxy啟動後,用curl google.com。檢測是否成功。
如果curl發生下面情況。而且你還很鬱悶。八成是伺服器時間不對。
[root@localhost ~]# curl www.google.com <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>502 - No server or forwarder data received (Privoxy@localhost)</title> <meta http-equiv="Content-Style-Type" content="text/css">
Composer 和 go get 的科學上網可以。配置環境變數 export http_proxy='127.0.0.1:8118' && export https_proxy='127.0.0.1:8118'
。然後composer 、go get 下載就好使了。
pecl 呢?比如安裝grpc 擴充套件時候,提示我 (Connection to
ssl://pecl.php.net:443' failed: ) 。這麼
pear config-set http_proxy your.proxy:port`( php pecl命令使用代理上網 )就搞定了。
檢視是否配置了代理 /home/nobody/web/php7/bin/pear config-show |grep 127
安裝 Protocol Buffers
參考 https://github.com/protocolbuffers/protobuf/blob/master/src/README.md
安裝完就可以用protoc根據.proto檔案生成對應語言的檔案了 。
環境安裝
先跑了一個官方demo
《Go Quick Start》 。我發現我的go版本不對。我的go版本是1.8.3 。run demo時,報瞭如下錯誤
golang.org/x/net/http2/server.go:220: s.RegisterOnShutdown undefined
這個 issue 說的是 。RegisterOnShutdown 方法是在 go1.9 新增的。於是我安裝了一個高於1.9版本的go1.11.4(用1.4.3編譯了一份1.11.4),如何用1.4.3編譯,我參考的是《Go語言學習筆記》第十二章。
1.11.4 安裝之後,安裝官方文件走了一遍好了。下載grpc 是比較慢的。
php 環境
我單獨編譯了一份 7.1的環境。我本機自帶5.4的版本不能用。grpc的擴充套件官方文件有說 PHP Quickstart 。
好久沒有編譯php了。發現編譯之後php.ini 不在etc下。於是:、
cp /home/nobody/web/php-7.1.25/php.ini-development /home/nobody/web/php7/etc/php.ini
composer 指定php執行,安裝protobuf 跟grpc。
/home/nobody/web/php7/bin/php /usr/bin/composer install
demo執行
繼續看她的文件就OK了。在執行go的時候,因為目錄的緣故。 grpc-server/main.go
檔案引入 `pb "../libs/go"的路徑需要變下。總之,引入問題的報錯是很好判斷與改正的。
收穫與教訓
收穫就是了解了http2,各個rpc框架的對比。protobuf的好處。科學上網。
教訓。不應該看ppt去找相關資料。而是應該先安裝官方文件走一走。就會順利。還有就是科學上網的必要性。
好吧!因為英文不好的緣故,推特沒怎麼用過!第一次發推!以後會著重學習英語。

推
對了,關於RPC。突然想起了 《Go Web 程式設計》 ([Asta謝] 的
8.4 RPC 。真是一個不錯的告訴你什麼是rpc的小例子。
參考資料:
- 《Building APIs with GRPC, PHP, and Golang》 https://speakerdeck.com/cecyc/building-apis-with-grpc-php-and-golang
*《Ubuntu下SS(ShadowSocks)搭建》 https://www.jianshu.com/p/4c95d10b898b