How to process parallel HTTP request in go programming language?

go

Solution

All connections are automatically handled concurrently. Each TCP connection (not request) gets its own goroutine.

In a world with http pipelining and browsers that reuse connections, this may not always work out well. Most likely your browser is reusing a connection which stalls it until the current request being processed by the goroutine finishes.

Problem

I was playing with the go HTTP package. I wanted to process request in parallel as I do in java. But I couldn't. I created a simple web server, put a sleep in the middle and realized that go process one request per time, so if I did a refresh on my browser, the process of the first request has to finish until the second request start processing, here is the code: ``` func main(){ //Process the http commands fmt.Printf("Starting http Server ... ") http.Handle("/", http.HandlerFunc(sayHello)) err := http.ListenAndServe("0.0.0.0:8080", nil) if err != nil { fmt.Printf("ListenAndServe Error",err) } } func sayHello(c http.ResponseWriter, req *http.Request) { fmt.Printf("New Request\n") processRequest(c, req) } func processRequest(w http.ResponseWriter, req *http.Request){ time.Sleep(time.Second*3) w.Write([]byte("Go Say’s Hello(Via http)")) fmt.Println("End") } ``` As I wanted to process both request in parallel I added the "go" command before "processRequest(c, req)" in "sayHello" function in order to process each request in a different gorutine. But... it doesn't work.... I don't know why. I know that both request are processed because I see the printed line at the console but the browser keep waiting for information..... and don't show my response. So... my questions, Does each request create a new http.ResponseWriter? or it's use the same? Do you know how to indicate the web server to process each request with different threads? Any help is welcomed.... Fersca

Original source