http.ListenAndServe处理并发的问题

来源:15-3 替换rpc的传输协议为http

慕妹3255656

2023-12-07

文档里说http.HandleFunc只是一个注册函数,ListenAndServe内置了处理并发的功能,每来一个request,都会起一个执行注册函数的goroutine。
但我实际一次发送了十个请求,发现实际上是阻塞的,所有的请求是按顺序执行的。是另外需要配置还是handleFunc写的有问题?

type HelloService struct {
}

func (s *HelloService) Hello(request string, reply *string) error {
	fmt.Println("start")
	time.Sleep(time.Second * 2)
	*reply = "hello " + request
	fmt.Println("finish")
	return nil
}

func main() {
	
	http.HandleFunc("/jsonrpc", func(w http.ResponseWriter, r *http.Request){
		
		var conn io.ReadWriteCloser = struct {
			io.Writer
			io.ReadCloser
		} {
			ReadCloser:r.Body ,
			Writer: w,
		}
		rpc.ServeCodec(jsonrpc.NewServerCodec(conn))

	})

	_ = rpc.RegisterName("HelloService", &HelloService{})

	
	http.ListenAndServe(":1234",nil)
	
}
写回答

1回答

bobby

2023-12-07

你发一下文档的地址我看看怎么写的?

0
2
bobby
回复
慕妹3255656
这个你使用了await就使得需要等到上一个结果出来以后才继续往下执行,所以变成了串行了
2023-12-13
共2条回复

Go+Python打造电商系统 自研微服务框架 抓紧高薪机遇

快速转型Go工程师,成为具备双语言后端能力的开发者

508 学习 · 530 问题

查看课程