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

如何在grpc go中实现非阻塞客户端?,go,blockchain,p2p,grpc,Go,Blockchain,P2p,Grpc,我想在不同的服务器上运行不同的远程过程,而不必等待服务器的回复。当服务器完成这个过程时,我想在客户端得到回复。是否可以使用grpc golang 我想实施区块链网络,我想让不同的对等方执行一项交易,但我不想等到一个对等方提供执行输出,然后再转移到另一个对等方 换句话说,我想广播过程的执行,然后在执行过程中得到所有答案 我尝试了连接客户端和服务器的常用方法,但它等待服务器的响应。它将增加需要在更多对等机上执行的时间。您可以使用 go func(){}() 要执行异步作业,您可以使用内置的sync

我想在不同的服务器上运行不同的远程过程,而不必等待服务器的回复。当服务器完成这个过程时,我想在客户端得到回复。是否可以使用grpc golang

我想实施区块链网络,我想让不同的对等方执行一项交易,但我不想等到一个对等方提供执行输出,然后再转移到另一个对等方

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

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

您可以使用

go func(){}()
要执行异步作业,您可以使用内置的sync包轻松控制异步任务 或者使用通道控制或同步任务


只需在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){};
如果您想做一些必须完成的事情,然后您想发送数据,请使用lock

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
 }()


听起来您可能需要一个发布子代理,而不仅仅是一个p2p系统。您是否使用
go func()
为每个服务器连接生成单独的线程?然后,您将使用WaitGroup等待所有线程完成。不,目前我没有使用
go func()
进行任何操作,对此我不太了解。我能用它吗?这样做不需要更多的端口吗?我对GRPC一无所知,所以我希望我的评论没有放错地方,但是使用带有WaitGroup的
go func
将是go中满足此类要求的标准模式。我不知道为什么您需要更多的端口,但正如我所说,我不知道GPRC。我还没有实现
go func()
,但我认为做一些工作就足够了。谢谢你。