亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過特定端口發送 GRPC 通信

通過特定端口發送 GRPC 通信

Go
慕斯王 2023-07-10 14:21:06
我正在運行一個 GRPC 服務器(服務器 A),偵聽特定端口。我希望能夠向另一臺服務器(服務器 B)發送通信,并讓服務器 B 記錄服務器 A 連接的傳入地址,以便稍后可以聯系服務器 A。在服務器 A 上,我監聽端口并創建如下上下文:lis, err := net.Listen("tcp", "0.0.0.0:6000")ctx, cancel := context.WithTimeout(context.Background(),    10000*time.Millisecond)然后像這樣創建連接:connection, err = grpc.DialContext(ctx, server2Address,grpc.WithInsecure(), grpc.WithBlock())在最終向服務器 B 上的端點發送消息之前,該端點嘗試讀取服務器 A 傳入連接的 IP 地址info, _ := peer.FromContext(ctx)fmt.Printf(info.Addr.String()) // Returns a random port, NOT 6000,然而,服務器 B 打印的結果端口是隨機的,例如 62056,而不是預期的 6000。我的假設是,在服務器 A 上,GRPC 從隨機端口撥號 - 是否可以強制 GRPC 從端口 6000 而不是隨機端口撥號?
查看完整描述

1 回答

?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

您可以像這樣指定源端口:


cc, err := grpc.Dial("127.0.0.1:6001", grpc.WithInsecure(),

? ? grpc.WithContextDialer(func(ctx context.Context, addr string) (net.Conn, error) {

? ? ? ? dst, err := net.ResolveTCPAddr("tcp", addr)

? ? ? ? if err != nil {

? ? ? ? ? ? return nil, err

? ? ? ? }

? ? ? ? src := &net.TCPAddr{

? ? ? ? ? ? IP:? ?net.ParseIP("127.0.0.1"),

? ? ? ? ? ? Port: 6000,

? ? ? ? }

? ? ? ? return net.DialTCP("tcp", src, dst)

? ? }))

但是,如果您的服務器正在偵聽同一端口,這將導致錯誤:


panic: dial tcp 127.0.0.1:6000->127.0.0.1:6001: bind: address already in use

另一種方法是將地址作為元數據傳遞。在客戶端您執行以下操作:


ctx := context.Background()

ctx = metadata.NewOutgoingContext(ctx, metadata.Pairs("address", "127.0.0.1:6000"))

res, err := grpc_health_v1.NewHealthClient(cc).Check(ctx, &grpc_health_v1.HealthCheckRequest{

? ? Service: "test",

})

在服務器上:


func (s *server) Check(ctx context.Context, req *grpc_health_v1.HealthCheckRequest) (*grpc_health_v1.HealthCheckResponse, error) {

? ? if md, ok := metadata.FromIncomingContext(ctx); ok {

? ? ? ? addr := md.Get("address")

? ? ? ? // addr == "127.0.0.1:6000"

? ? }


? ? return &grpc_health_v1.HealthCheckResponse{

? ? ? ? Status: grpc_health_v1.HealthCheckResponse_SERVING,

? ? }, nil

}

第三種方法是使用流式傳輸。



查看完整回答
反對 回復 2023-07-10
  • 1 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號