我在GoLang中创建了一个REST API(使用gorillamux),在我的API的一个请求中,我处理了一个XMLFile。问题是,这个文件很大,5,6,10 MB。我无法处理postfile请求,因为进程的时间。 xml的每个节点都是对另一个API的http请求(非常时间)。
问题是。
在GoLang中,它可能会收到请求,返回响应(200)和请求处理文件?
在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
}
是。 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
中检查并返回错误(此处未显示)