处理XMLFile请求

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

我在GoLang中创建了一个REST API(使用gorillamux),在我的API的一个请求中,我处理了一个XMLFile。问题是,这个文件很大,5,6,10 MB。我无法处理postfile请求,因为进程的时间。 xml的每个节点都是对另一个API的http请求(非常时间)。

问题是。

在GoLang中,它可能会收到请求,返回响应(200)和请求处理文件?

go request gorilla
2个回答
0
投票

在GoLang中,它可能会收到请求,返回响应(200)和请求处理文件?

当然。你可以使用goroutine:

func myHandler(w http.ResponseWriter, r *http.Request) {
    go func() {
        // Process the stuff in a goroutine
    }()
    w.WriteHeader(200) // but send the response immediately
}

0
投票

是。 Go为它提供了非常方便的工具。这项任务的一种经典方法是建立一个充当任务队列的通道。您的API函数将写入通道新任务,另一个工作程序goroutine将读取并处理它们:

type Task struct {...} // some fields to describe you task - may be XML document 
var TaskQueue chan Task

func worker() {
      for task := range TaskQueue {
             // process task 
       }
}

func handler(w http.ResponseWriter, r*http.Request) {
    task := Task{...} // put here some values you need 
    TaskQueue <- task
    w.WriteHeader(200)
}


func main() {
    TaskQueue = make(chan Task, 1)
     go worker()
     http.Handle("/", handler)
     http.ListenAndServe(":8080", nil)
}

这种方式给你一些灵活性:

  • 您可以运行多个工作程序来并行处理任务,您可以确定将不再有工作程序,因此可以控制服务器的负载
  • 如果所有工作人员都忙,新任务可以放入队列 - make的第二个参数设置队列长度
  • 如果队列过载,您可以在handler中检查并返回错误(此处未显示)
© www.soinside.com 2019 - 2024. All rights reserved.