草庐IT

RPC和GRPC

全部标签

google-maps - 我应该将新的还是旧的 Context 对象发送到我自己的 gRPC 服务器中的第 3 方 gRPC API?

我们有一个用golang编写的gRPC服务器。对于其中一个RPC,我们从GoogleMapsgRPCAPI请求数据。一旦我们收到来自GoogleMapsRPC的响应,我们就会进行一些计算并将响应返回给封闭的RPC(由我们的服务器定义)。自然地,当在我们的服务器上调用RPC时,我们会收到一个Context对象。我的问题是:我们是否应该将这个相同的Context对象传递给GoogleMapsRPC?或者,我们是否应该创建一个新的Context对象(使用context.Background()),然后将其传递给GoogleMapsAPI? 最佳答案

go - 如何从 grpc-server 流式传输结果以及如何从 goroutines grpc server-stream 返回结果以将结果传递给 api

我有一个通过golang创建的api,它返回的结果{id:drone4item_parameter:{altitude:20,longitude:10.20latitude:24.5}作为json结果,但在它使用的代码中调用gofunc()进行处理的goroutines来自grpc-servergolang的结果像这样gofunc(){fmt.Print("startgetPositionloop")for{msg,err:=stream.Recv()//msgUAVPositioniferr==io.EOF{//readdone.fmt.Print("startgetPosition

docker - 使用 gRPC 进行容器间通信

我正在实现在两个不同容器上运行的两个服务(服务器和客户端),并尝试使用gRPC在它们之间进行通信。如果我将服务器部署为容器并在容器上不运行客户端,一切正常。但是,如果我将客户端部署在不同的容器上,我会收到Error#01:couldnotretrieverestaurant'slist:rpcerror:code=Unavailabledesc=grpc:theconnectionisunavailable错误。使用gRPC通信两个不同的容器时,我缺少哪些步骤?PS:我想暂时不用Kubernetes试试。服务器funcServe(){log.Println("serving...")p

go - 如何在 gRPC 中从服务器向客户端广播?

我现在正在gRPC中创建一个小型聊天应用程序,我遇到了一个问题,如果用户想作为客户端连接到gRPC服务器,我想广播事件已经发生到所有其他连接的客户端。我正在考虑使用某种观察者,但我对服务器如何知道谁已连接以及我如何将事件广播给所有客户端而不仅仅是一两个客户端感到困惑。我知道使用流是部分答案,但因为每个客户端都在与服务器创建自己的流,所以我不确定它如何订阅其他服务器-客户端流。 最佳答案 另一种选择是使用长轮询方法。那就是尝试像下面这样的东西(Python中的代码,因为这是我最熟悉的,但go应该非常相似)。这没有经过测试,只是为了让您

go - Go 中的 grpc header /cookie

我想在服务器应用程序上做一个可以被GoAPP和Java应用程序调用的地方。由于某种原因,有一个cookie认证和oAuth机制,所以我想将一个Go应用程序设置为Auth微服务以进行认证。由于GRPC是建立在HTTP2之上的,所以headers和cookies在协议(protocol)上。但是我没有找到rpc发生时如何携带header和cookie,Go实现的,在GitHub上我只找到了JAVA-标题的实现:https://github.com/grpc/grpc-java/tree/master/examples/src/main/java/io/grpc/examples/heade

go - 如何从 Go 客户端获取 gRPC 服务器 IP

我使用docker-compose或kubernetes来部署我的gRPC服务器,并希望在go客户端中获取服务器IP地址。gRPC库是否提供获取服务端IP的方法?顺便说一句,这里的场景是我想记录服务器ip以检查nginx、envoy和其他L7负载平衡器是否做出正确的路由决策。 最佳答案 这是一个有趣的问题,因为您在创建客户端之前就已经了解了gRPC服务器地址conn,err:=grpc.Dial(*serverAddr)iferr!=nil{...}deferconn.Close()client:=pb.NewRouteGuideC

docker - 如何在支持 golang 的 gRPC 中减小 docker 镜像的大小?

我有一些服务器和客户端使用gRPC/golang进行通信。现在我想容器化我的应用程序,但是包含goland执行和grpc支持的docker镜像的大小更大(超过1GB)。我想减小docker图像的大小。所需的golang版本为1.9及更高版本。这是给出的Dockerfile脚本。如果有其他方法请建议。FROMgolang:1.11RUNapt-getupdate&&\apt-get-yinstallgitunzipbuild-essentialautoconflibtoolRUNgitclonehttps://github.com/google/protobuf.git&&\cdprot

python - 跨语言客户端/服务器的双向 RPC 选项

我正在尝试为一个项目提出一个想法,其中客户端GUI可以用python开发,并且GUI可以由后端以可能的任何其他语言通过RPC驱动。更具体地说,现在我在客户端使用PyQt,并将Go作为初始后端。这是我的目标:PyQt客户端角色:查看、控制Oneway调用(SIGNAL/SLOT),例如:button.clicked->RPC.handleSignal请求/回复RPC,如:rowCount=model.rowCount->RPC.call.model.rowCount不可知后端(在本例中为Go)角色:控制者、模型Oneway调用(发出信号),例如:model.dataChanged->RP

php - 在 PHP 中调用 Go RPC 套接字方法

我开始寻找RPC框架并找到了gRPC,但我的问题是它使用Protocol-Buffer,我担心如果我想在我当前的单体PHP应用程序中使用它,那将是一团糟。所以,我开始实现一个Go基本RPC服务,但目前我不知道在PHP中使用什么以及如何使用它。所以基本上我有一个数据库管理器包,其中有这些结构和方法:typeDatabaseManagerstruct{Database*gorm.DBLoglogging.Logger}func(db*DatabaseManager)Last(args*string,reply*string)error{db.Log[logging.INFO].Printf

http - gRPC 服务器错误处理程序 golang

我想了解有关golang、gRPC和protobuf的良好实践。我正在实现以下gRPC服务serviceMyService{rpcdosomethink(model.MyModel)returns(model.Model){option(google.api.http)={post:"/my/path"body:""};}}我编译了protobufs。事实上,protobuf给了我们一个从http到grpc的httpproxy。实现该服务的代码:import"google.golang.org/grpc/status"func(Abcd)Dosomethink(ccontext.Con