記錄一下golang中升級apns,使用http2替換http1.1的詳細過程。
apns使用http2的好處就不用再說了,網上一搜一堆信息。蘋果的apns推送在2015年8月就支持了http2協議,新的協議還是比較人性化的,基於http2的速度也有提升。
接下來列舉下升級的步驟。
1. 對於golang的版本有要求,需要將golang升級到1.5以上。當前最新穩定版本是1.6.2,所以我直接升級到了1.6.2。
注意golang1.6對系統有要求,否則源碼編譯不會通過:

refer: https://golang.org/doc/install
鑒於工作中當前的golang版本是1.1.2,比較老,其升級到1.6.2需要先升級到1.4。因為1.4之后的版本,編譯是基於golang的,而不再是gcc。 1)下載golang1.4的包,解壓到/usr/local(這之前先將老的go備份吧,1.4的目錄使用go1.4吧,因為這是臨時的)。當然這個安裝路徑隨便怎么選,一般是這個路徑。 2)編譯源碼。進入go1.4/src,執行./all.bash,等待... 3)解壓go1.6的包,解壓到/usr/local,目錄取名直接就是go 4)配置GOROOT_BOOTSTRAP環境變量,指向go1.4的目錄 export GOROOT_BOOTSTRAP=/usr/local/go1.4 因為這個是臨時的,就直接在會話中指定。 5)進入go1.6進行源碼編譯 cd /usr/local/go/src ./all.bash 6)編譯通過后,設置環境變量,在/etc/profile中追加(估計之前有這個GOROOT的,沒有這個就追加) export GOROOT=/usr/local/go PATH=$PATH:$GOROOT/bin/ 然后保存退出 source /etc/profile
7)go version看看版本號
2. 下載必須的第三方包,使用go get失敗的,就去其他地方手動下載吧,因為國外的網站,在天朝是被牆的。推薦去https://gopm.io/download
必須下載以下的第三方包: golang.org/x/crypto golang.org/x/net/http2 golang.org/x/text 將這些包解壓到你的GOPATH工作目錄。解壓后目錄如下 src ├── github.com ... ├── golang.org │ └── x │ ├── crypto │ ├── net │ └── text 之后再 go get golang.org/x/net/http2 go get golang.org/x/crypto go get golang.org/x/text
到此為止,可以在golang里面使用http2進行開發了。
遇到的問題
1. apns的請求返回報錯,malformed HTTP status code "client"
這個錯誤是因為使用了http1.1的協議去請求,而apns使用的是http2的協議。可能是原因是自己沒有成功使用http2.
