Estaba jugando con el paquete HTTP go. Quise procesar la solicitud en paralelo como lo hago en Java. Pero no pude.¿Cómo procesar la solicitud HTTP paralela en el lenguaje de programación go?
Creé un servidor web simple, me quedé dormido en el medio y me di cuenta de que debía procesar una solicitud por vez, así que si hice una actualización en mi navegador, el proceso de la primera solicitud debe terminar hasta la segunda solicitud iniciar el procesamiento, aquí está el código:
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")
}
Como quería procesar tanto petición en paralelo añadí el "ir" comando antes "processRequest (c, req)" en la función "sayHello" con el fin de procesar cada solicitud en un gorutine diferente. Pero ... no funciona ... No sé por qué. Sé que ambas solicitudes se procesan porque veo la línea impresa en la consola, pero el navegador sigue esperando información ... y no muestra mi respuesta.
Así que ... mis preguntas,
¿Cada petición de creación de una nueva http.ResponseWriter? o es usar lo mismo? ¿Sabes cómo indicar el servidor web para procesar cada solicitud con diferentes hilos?
Cualquier ayuda es bienvenida ....
Fersca
Gracias. Hoy se desperdicia tanto tiempo solo por el comportamiento demasiado inteligente del navegador :) –