如何在 grpc go 中实现非阻塞客户端?

how to implement non-blocking client in grpc go?

我想 运行 在不同的服务器上执行不同的远程过程,而不用等待服务器的回复。当服务器完成程序时,我想在客户端回复。可以用 grpc golang 做吗?

我想实现一个区块链网络,我想要求不同的节点执行一个交易,但我不想等到一个节点提供执行的输出,然后我转移到另一个节点。

换句话说,我想广播程序的执行过程,然后在执行过程中得到所有答案。

我尝试了连接客户端和服务器的常用方法,但它等待来自服务器的响应。它将增加需要在更多对等点上执行的时间。

您可以使用

go func(){}()

做异步任务,你可以使用同步内置包轻松控制异步任务 或者使用频道来控制或同步任务。

https://golang.org/pkg/sync/

https://gobyexample.com/channels

只需在 gRPC 中进行客户端流式处理即可 客户端在发送所有数据时一次又一次地发送消息

 // add stream keyword when use in client side streaming
 rpc HeavyLoadData(stream P2PMessages) returns (P2PMessages);

如果你想要连续性,你也可以使用双向

message P2PMessages{
    string anything = 1;
}

rpc Messages(stream P2PMessages) returns (stream P2PMessages){};

如果你想做一些必须完成的事情然后你想发送数据使用锁

var lock = &sync.RWMutex{}

// it will lock until your logic completes 
fun test(){
lock.RLock()
defer lock.RUnlock()
//do something your logic
}

如果您有多个客户端创建一个客户端并希望在完成您使用的逻辑后发送数据,您也可以使用它

首先创建客户地图

var clients = make(map[string]string)

//then use the threading in go 
 go func(){
 // maintain here all your client when you want to send the data to whom
 }()