我正在学习 Go,并且正在编写一个简单的 Web 服务器,它使用一个通道来限制并发请求的数量。服务器在控制台打印日志条目,显示它正在接收请求并处理它们,但是客户端浏览器不显示任何输出。我试过添加响应编写器的冲洗,但没有帮助。
作为菜鸟,我错过了什么?感谢您提供任何提示/指示。
这是代码:
package main
import (
"fmt"
"html"
"net/http"
"time"
)
// define a type to be used with our request channel
type clientRequest struct {
r *http.Request
w http.ResponseWriter
}
const (
MaxRequests int = 10
)
// the request channel, to limit the number of simultaneous requests being processed
var reqChannel chan *clientRequest
func init() {
reqChannel = make(chan *clientRequest, MaxRequests)
}
func main() {
// create the server's handler
var ServeMux = http.NewServeMux()
ServeMux.HandleFunc("/", serveHandler)
// start pool of request handlers, all reading from the same channel
for i := 0; i < MaxRequests; i++ {
go processRequest(i)
}
// create the server object
s := &http.Server{
Addr: ":8080",
Handler: ServeMux, // handler to invoke, http.DefaultServeMux if nil
ReadTimeout: 10 * time.Second, // maximum duration before timing out read of the request
WriteTimeout: 10 * time.Second, // maximum duration before timing out write of the response
MaxHeaderBytes: 1 << 20, // maximum size of request headers, 1048576 bytes
}
// start the server
err := s.ListenAndServe()
if err != nil {
fmt.Println("Server failed to start: ", err)
}
}
func serveHandler(w http.ResponseWriter, r *http.Request) {
var newRequest = new(clientRequest)
newRequest.r = r
newRequest.w = w
reqChannel <- newRequest // send the new request to the request channel
fmt.Printf("Sent request to reqChannel for URL: %q\n", html.EscapeString(r.URL.Path))
}
ibeautiful
慕的地6264312
相关分类