記錄一下golang中升級apns,使用http2替換http1.1的詳細過程。git
apns使用http2的好處就不用再說了,網上一搜一堆信息。蘋果的apns推送在2015年8月就支持了http2協議,新的協議仍是比較人性化的,基於http2的速度也有提高。github
接下來列舉下升級的步驟。golang
1. 對於golang的版本有要求,須要將golang升級到1.5以上。當前最新穩定版本是1.6.2,因此我直接升級到了1.6.2。bash
注意golang1.6對系統有要求,不然源碼編譯不會經過:網站
refer: https://golang.org/doc/installspa
鑑於工做中當前的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/downloadcode
必須下載如下的第三方包: 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進行開發了。orm
遇到的問題blog
1. apns的請求返回報錯,malformed HTTP status code "client"開發
這個錯誤是由於使用了http1.1的協議去請求,而apns使用的是http2的協議。多是緣由是本身沒有成功使用http2.