这个简单的HTTP服务器包含一个对time.Sleep()的调用,它使每个请求花费5秒的时间。当我尝试在浏览器中快速加载多个选项卡时,很明显每个请求都是按顺序排队和处理的。如何让它处理并发请求?
package main
import (
"fmt"
"net/http"
"time"
)
func serve(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world.")
time.Sleep(5 * time.Second)
}
func main() {
http.HandleFunc("/", serve)
http.ListenAndServe(":1234", nil)
}
实际上,我是在写完问题后才找到这个问题的答案的,而且这个问题非常微妙。我还是把它贴出来了,因为我在谷歌上找不到答案。你能看到我做错了什么吗?
发布于 2015-11-24 17:05:45
在Server.go中,当连接被接受时,在服务函数中产生go例程。以下是代码片段:-
// Serve accepts incoming connections on the Listener l, creating a
// new service goroutine for each. The service goroutines read requests and
// then call srv.Handler to reply to them.
func (srv *Server) Serve(l net.Listener) error {
for {
rw, e := l.Accept()
if e != nil {
......
c, err := srv.newConn(rw)
if err != nil {
continue
}
c.setState(c.rwc, StateNew) // before Serve can return
go c.serve()
}
}
发布于 2016-06-16 06:22:02
如果使用xhr请求,请确保xhr实例是本地变量。
例如,xhr = new XMLHttpRequest()
是一个全局变量。当您使用相同的xhr变量进行并行请求时,您只会收到一个结果。因此,您必须像这样在本地声明xhr var xhr = new XMLHttpRequest()
。
https://stackoverflow.com/questions/10720867
复制相似问题