導航:首頁 > 編程語言 > python使用grpc

python使用grpc

發布時間:2023-03-12 08:56:53

pythonjava如何構建通信請給出一個學習方向。

1、python提供restful介面,java直接調用restful api即可;
2、rpc通信,現成框架例如grpc。 java 和python都支持。
3、消息隊列,python計算結果存到消息隊列,java端訂閱處理即可。相當於引入一個中間代理角色。
思路大概就上面的方式,根據實際場景進行技術選型。

㈡ grpc原理

1)需要使用protobuf定義介面,即.proto文件

2)然後使用compile工具生成特定語言的執行代碼,比如JAVA、C/C++、Python等。類似於thrift,為了解決跨語言問題。

3)啟動一個Server端,server端通過偵聽指定的port,來等待Client鏈接請求,通常使用Netty來構建,GRPC內置了Netty的支持。

4)啟動一個或者多個Client端,Client也是基於Netty,Client通過與Server建立TCP長鏈接,並發送請求;Request與Response均被封裝成HTTP2的stream Frame,通過Netty Channel進行交互。

對於GRPC的「鼓吹」,本文不多表述,截止到今日,GRPC仍然處於開發階段,尚沒有release版本,而且特性也很多需要補充;GRPC基於protobuf 3.x,但是protobuf 3.x也沒有release版本;雖然HTTP2協議已成定局,但尚未被主流web容器包括代理伺服器支持,這意味著GRPC在HTTP負載均衡方面尚有欠缺;最終,在短期內我們還不能在proction環境中實施,可以做技術儲備。不過GRPC的缺點,在將來將會成為它的優點,我們需要時間等待它的成熟。

1)GRPC尚未提供連接池

2)尚未提供「服務發現」、「負載均衡」機制

3)因為基於HTTP2,絕大部多數HTTP Server、Nginx都尚不支持,即Nginx不能將GRPC請求作為HTTP請求來負載均衡,而是作為普通的TCP請求。(nginx將會在1.9版本支持)

4)GRPC尚不成熟,易用性還不是很理想;就本人而言,我還是希望GRPC能夠像hessian一樣:無IDL文件,無需代碼生成,介面通過HTTP表達。

5)Spring容器尚未提供整合。

在實際應用中,GRPC尚未完全提供連接池、服務自動發現、進程內負載均衡等高級特性,需要開發人員額外的封裝;最大的問題,就是GRPC生成的介面,調用方式實在是不太便捷(JAVA),最起碼與thrift相比還有差距,希望未來能夠有所改進。

㈢ gRPC入坑記

概要

由於gRPC主要是谷歌開發的,由於一些已知的原因,gRPC跑demo還是不那麼順利的。單獨寫這一篇,主要是gRPC安裝過程中的坑太多了,記錄下來讓大家少走彎路。

主要的坑:

本文講解gRPC demo的同時,會介紹如何解決這些坑。本文對應的Github地址:https://github.com/52fhy/grpc-sample 。該倉庫存儲了demo示例,以及部分系統編譯好的二進制包,大家覺得有些步驟里耗時實在太長了,可以直接clone該倉庫,復制二進制包到對應目錄(僅限測試開發,生產環境還是老老實實自己編譯吧)。

升級GCC

gRPC命令行工具編譯需要使用 GCC4.8及以上版本。CentOS6系列的內置版本是GCC4.7。

如果你的系統GCC版本>=4.8,可以忽略本節。如果僅使用golang、java,請忽略本節。

如果需要升級gcc至4.8或更高版本,建議直接採用安裝SCL源之後安裝devtoolset-6(devtoolset-6目前gcc版本為6.3),因為devtoolset-4及之前的版本都已經結束支持,只能通過其他方法安裝。

升級到gcc 6.3:

需要注意的是scl命令啟用只是 臨時 的,退出shell或重啟就會恢復原系統gcc版本。如果要長期使用gcc 6.3的話:

這樣退出shell重新打開就是新版的gcc了。其它版本同理。

升級到gcc 7.3:

已經停止支持的devtoolset4(gcc 5.2)及之前版本的安裝方法,可能比較慢,大家感興趣的話可以嘗試。

編譯gRPC命令行工具

gRPC分C、JAVA、GO、NodeJS版本,C版本包括C++, Python, Ruby, Objective-C, php, C#,這些語言都是基於C版本開發的,共用代碼庫一個代碼庫。

如果使用C版本的gRPC,最終要從源碼里編譯出下列工具:

這些工具作為插件供proto編譯器使用。需要先下載 grpc/grpc github上的源碼。

這里有2個坑:

1、grpc/grpc倉庫比較大,鑒於國內訪問的網速,建議使用國內鏡像。碼雲(https://gitee.com)提供了同步更新的鏡像地址:

這樣下載速度提高了不少。

2、git submole update這個命令實際就是在下載.gitmoles文件里定義的第三方依賴項到third_party目錄,這個依賴項有很多,大家可以打開.gitmoles文件查看下詳情。依賴的倉庫都在github上,下載沒幾個小時是下載不下來的,就等著慢慢下載吧。

回頭想想,我們花費了很多時間,結果只是為了得到grpc的proto編譯插件。

PHP相關支持

PHP暫時不支持作為grpc的服務端。作為客戶端是可以的,需要機器安裝:

其中protoc和protobuf c擴展已經在 Protobuf 小試牛刀 介紹過了,這里不再贅述。上一小節里如果安裝成功,那麼grpc_php_plugin也是有了的。下面介紹如何安裝PHP版的gRPC庫。

安裝grpc c擴展:

要求:GCC編譯器需要4.8及以上版本。可以使用pecl安裝:

也可以指定版本:

或者下載源碼(http://pecl.php.net/package/grpc)安裝:

grpc/grpc代碼庫里也有PHP擴展的C源碼,在grpc/src/php/ext/grpc目錄,進去也可以直接編譯。

編譯完成後在php.ini里添加,使用php --ri grpc可以查看信息。

安裝完C擴展後,還需要使用composer安裝grpc的庫:

gRPC示例

編寫gRPC proto

一共定義了三個文件:

其中 User 作為 Model定義,Response 用於 RPC統一返回定義,GreeterService 則是服務介面定義。

限於篇幅,proto文件詳見 https://github.com/52fhy/grpc-sample 倉庫的proto目錄。

GreeterService.proto文件內容如下:

這裡面定義了一個service,相當於定義了一個服務介面,我們把方法名、參數定義好了,後面需要去實現它。由於gRPC不支持PHP作為服務端,這里我們使用Golang作為服務端。

首先需要使用proto工具編譯出golang的代碼:

執行成功,會在 Pb_Go目錄里生成Go代碼:

如果需要生成PHP客戶端的代碼,則需要使用grpc php的命令行工具grpc_php_plugin,前面小結如果執行成功,這個工具已經有了。然後:

最終生成的文件:

注意:編譯那裡如果我們不加--grpc_out=../$out --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin,生成的PHP類是沒有GreeterClient的。這個文件是gRPC編譯工具自動生成的,用於連接gRPC服務端。

go編寫服務

我們用Golang寫服務端。上面雖然生成了Golang的部分代碼,但真正的服務還沒有寫呢。

main.go

首先我們新建個main.go,代碼不多,我直接貼出來:

然後就可以編譯了。

有個大坑:go build main.go的時候會先下載go.mod里定義的依賴(依賴比較多,詳情查看:https://github.com/52fhy/grpc-sample/blob/master/go.mod),其中下面這條非常慢,倉庫太大了,雖然重定向到github:

為了快速下載,我在碼雲上做了鏡像,地址:gitee.com/52fhy/google-api-go-client 。改了之後下載快多了。

編譯成功後,生成了二進制文件main。我們可以直接運行:

go test

為了測試我們寫的服務是否正常,可以寫測試用例:

test_client.go

運行:

運行有點慢,感覺依賴的庫多了。

php客戶端

使用gRPC PHP客戶端,確保你已經安裝了:

示例:

client_test.php

運行後輸出:

常見問題

1、CentOS6使用 go mod獲取第三方依賴包unknown revision xxx錯誤

解決:其實go mod調用鏈中會用到一些git指令,當git版本比較舊時,調用失敗產生錯誤,並給出歧義的提示信息。方法就是升級git版本,CentOS6自帶的git是1.7版本。升級完畢後,再嘗試go mod。

快速升級方法:

centos6:

2、PHP報錯:Fatal error: Class &#' not found

解決:請安裝PHP的protobuf c擴展。

3、PHP報錯:Fatal error: Class 'GrpcBaseStub' not found

解決:使用composer require grpc/grpc安裝grpc。另外對應的grpc C擴展也要安裝。

4、下載 github release包很慢怎麼辦?

解決:下載Mac版 Free Download Manager 下載工具可以解決Github 下載緩慢或失敗問題。速度嗖嗖的。

參考

1、為CentOS 6、7升級gcc至4.8、4.9、5.2、6.3、7.3等高版本

http://www.vpser.net/manage/centos-6-upgrade-gcc.html

2、centos 6.x/7.x使用yum升級git版本 - 夜空

https://blog.slogra.com/post-721.html

3、Protobuf 小試牛刀 - 飛鴻影

https://www.cnblogs.com/52fhy/p/11106670.html

(本文完)

㈣ python grpc如何給proto文件中map類型的變數賦值

改完之後,你可以選擇project->clean,clean後你項目的R.java文件就會重新生成,所有的資源ID會重新分配,這樣子你所修改的資源才能被Android真正識別,有時這個操作不是必要的,但是如果出現你修改了資源後,你的項目中出現了一些問題,那麼執行Clean是一個必須的選擇,這些資源包括drawable下的圖片,布局裡id的修改,values下資源的修改,你可以著手試一下 Good luck

㈤ python後端開發需要學什麼

第一階段:Python語言基礎


主要學習Python最基礎知識,如Python3、數據類型、字元串、函數、類、文件操作等。階段課程結束後,學員需要完成Pygame實戰飛機大戰、2048等項目。


第二階段:Python語言高級


主要學習Python庫、正則表達式、進程線程、爬蟲、遍歷以及MySQL資料庫。


第三階段:Pythonweb開發


主要學習HTML、CSS、JavaScript、jQuery等前端知識,掌握python三大後端框架(Django、 Flask以及Tornado)。需要完成網頁界面設計實戰;能獨立開發網站。


第四階段:Linux基礎


主要學習Linux相關的各種命令,如文件處理命令、壓縮解壓命令、許可權管理以及Linux Shell開發等。


第五階段:Linux運維自動化開發


主要學習Python開發Linux運維、Linux運維報警工具開發、Linux運維報警安全審計開發、Linux業務質量報表工具開發、Kali安全檢測工具檢測以及Kali 密碼破解實戰。


第六階段:Python爬蟲


主要學習python爬蟲技術,掌握多線程爬蟲技術,分布式爬蟲技術。


第七階段:Python數據分析和大數據


主要學習numpy數據處理、pandas數據分析、matplotlib數據可視化、scipy數據統計分析以及python 金融數據分析;Hadoop HDFS、python Hadoop MapRece、python Spark core、python Spark SQL以及python Spark MLlib。


第八階段:Python機器學習


主要學習KNN演算法、線性回歸、邏輯斯蒂回歸演算法、決策樹演算法、樸素貝葉斯演算法、支持向量機以及聚類k-means演算法。


關於python後端開發需要學什麼的內容,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。

閱讀全文

與python使用grpc相關的資料

熱點內容
雅思聽力807詞彙pdf 瀏覽:897
黃豆私人加密 瀏覽:192
java分鍾轉換小時 瀏覽:245
易語言伺服器如何提高 瀏覽:591
網站主機伺服器地址查看 瀏覽:859
演算法學不會能當程序員嗎 瀏覽:119
程序員技術交流研究 瀏覽:814
javaresponse文件 瀏覽:734
linuxrar壓縮文件夾 瀏覽:218
魅藍手機連接不上伺服器怎麼回事 瀏覽:379
工行app怎麼改已綁定銀行卡 瀏覽:533
oppo晶元程序員 瀏覽:602
oppok3應用怎麼加密 瀏覽:327
電腦軟盤怎麼加密碼 瀏覽:815
伺服器光交換機有什麼用 瀏覽:708
app上怎麼拍蛙小俠 瀏覽:217
志高聊天app怎麼下載 瀏覽:635
郵政app怎麼不能掃付款碼 瀏覽:559
筆記本電腦雙理由配置命令 瀏覽:65
拿著文件夾怎麼畫 瀏覽:877