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

问题描述 投票:0回答:2

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

我想实现一个区块链网络,我想让不同的对等体执行一个事务但我不想等到一个对等体提供执行输出然后我转移到其他对等体。

换句话说,我想广播过程的执行,然后在执行完成时获得所有答案。

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

go blockchain p2p grpc
2个回答
0
投票

您可以使用

go func(){}()

要执行异步作业,您可以使用同步内置程序包轻松控制异步任务,或使用通道控制或同步任务。

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

https://gobyexample.com/channels


0
投票

只需简单地在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
 }()

© www.soinside.com 2019 - 2024. All rights reserved.