我對grpc還停留在勉強會用的級別,苦於沒有專案經歷實現一下,下面講講自己總結、公開課中老師講的的grpc的使用
⚪也就是編寫乙個協議,把輸入和輸出以及服務分別封裝到乙個物件(message和service)中
⚪要明確自己的服務用來做什麼,輸入是什麼,輸出是什麼。對於網路程式設計來說就是請求什麼,響應什麼
⚪比如對於根據賬號查密碼的業務,使用者在前端輸入賬號,在後端我們根據賬號從資料庫查密碼,將密碼返回給前端。也就是說輸入這個服務輸入賬號,輸出密碼。那麼,將賬號和密碼分別封裝到表示請求(輸入)和相應(輸入)的message中。定義服務,裡面封裝處理函式。
⚪定義好服務(service),請求(request message),相應(reponse message)三個模型,就解決了微服務百分之九十的模型
syntax =
"proto3"
;// 指定proto版本
package findqqpassword;
// 指定包名
option go_package =
"findqqpassword"
;// 定義服務
service findqqpassword
}// 請求結構
message qqrequest
// 響應結構
message qqresponse
⚪寫完 .proto檔案,命令列cd到當前資料夾,執行以下語句形成go**,首先你要安裝go語言protobuf,我部落格裡也有如何安裝
protoc --go_out=plugins=grpc.
*.proto
⚪建立client,server模組,.proto檔案和生成的go檔案一般放在pb資料夾下,三個模組的分布:
⚪編寫客戶端
1、獲取伺服器連線
conn, err := grpc.
dial
("localhost:8080"
,grpc.
withinsecure()
)if err !=
nil
2、建立微服務的客戶端物件,pb是給proto模組的別名
pb "go_code/findqqpwd/protoc"
c := pb.
newfindqqpasswordclient
(conn)
3、定義請求結構體
req :=
&pb.qqrequest
4、執行服務**,得到查到的密碼
res,
_:= c.
getqqpassword
(context.
background()
,req)
fmt.
println
(res.qqpassword)
⚪編寫server端
1、我們編寫的proto檔案中的service,protobuf給我們生成乙個介面
// findqqpasswordserver is the server api for findqqpassword service.
type findqqpasswordserver inte***ce
眾所周知,乙個物件實現了介面的方法即實現了該介面。所以我們要建立乙個物件,並實現介面的方法。
type findpwdbyqq struct
func
(fpwd findpwdbyqq)
getqqpassword
(cxt context.context, in *pb.qqrequest)
(*pb.qqresponse,
error
)return res,
nil}
2、監聽埠
listen, err := net.
listen
("tcp"
,"localhost:8080"
)if err !=
nil
3、建立grpc伺服器
s:=grpc.
newserver
()
4、註冊伺服器
findpwdbyqq := findpwdbyqq
//註冊伺服器
pb.registerfindqqpasswordserver
(s,findpwdbyqq)
5、服務
s.
serve
(listen)
基於TCP IP的網路程式設計步驟
一.tcp流式套接字的程式設計步驟 在使用之前須鏈結庫函式 工程 設定 link 輸入ws2 32.lib 伺服器端程式 1 載入套接字型檔 2 建立套接字 socket 3 將套接字繫結到乙個本地位址和埠上 bind 4 將套接字設為監聽模式,準備接收客戶請求 listen 5 等待客戶請求到來 ...
基於UDP的網路程式設計步驟
基於udp 伺服器端 1.建立乙個socket,用函式socket 2.繫結ip位址 埠資訊等到socket上,用函式bind 3.迴圈接收資料,用函式recvfrom 4.關閉網路連線 include include include include include include include ...
基於TCP 的網路程式設計步驟
基於tcp 伺服器端 1.建立乙個socket,用函式socket 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.設定允許的最大連線數,用函式listen 4.等待來自客戶端的連線請求,用函式accept 5.收發資料,用函式send 和recv 或者read 和write 6.關...