为了账号安全,请及时绑定邮箱和手机立即绑定

如何在生产者/消费者场景中获得消费者的响应?

如何在生产者/消费者场景中获得消费者的响应?

Go
三国纷争 2021-07-06 13:05:34
我一直在尝试使用渠道来构建某种生产者/消费者。我有一个requests频道,许多生产者推送请求,然后我有processRequests处理请求的频道。package mainvar requests chan stringfunc processRequests() {    for {        request <- requests        // Process request...        // And return response - how?    }}func main() {    requests = make(chan string)    go processRequests()    requests <- "doSomething"    requests <- "doSomethingElse"    requests <- "etc"    select {} // Block forever}我想知道的是,一旦请求得到满足,将响应发送回生产者(以及正确的响应,因为不止一个)的最佳方式是什么?基本上如何使这成为双向通道?
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

你真的应该使用两个通道。试图让它与一个通道一起工作会很麻烦。


生产者/消费者模式上有一个可能有用的Google 站点。


为了让生产者知道消费者正在响应什么,您可以使用一个结构作为响应:


type responseMessage struct {

    Request string

    Response string

}


var requests chan string

var responses chan *responseMessage


func processRequests() {

    for {

        request <- requests

        // Process request...

        responses <- &responseMessage{request, "some response string"}

    }

}


func processResponses() {

    someResponseMessage := <- responses

    if someResponseMessage.Request == "doSomething" {

        // do something!

    }

}


func main() {

    requests = make(chan string)

    responses = make(chan *responseMessage)


    go processRequests()

    go processResponses()


    requests <- "doSomething"

    requests <- "doSomethingElse"

    requests <- "etc"


    select {} // Block forever

}


查看完整回答
反对 回复 2021-07-19
  • 1 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信