处理XMLFile请求

时间:2017-12-22 20:39:58

标签: go request gorilla

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

问题是。

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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中查看并返回错误(此处未显示)