【发布时间】:2018-04-11 07:54:54
【问题描述】:
假设我给定的 GRPC 端点具有以下实现
type HandlerFunc func(ctx context.Context, in *pb.Request) (*pb.Response, error)
func newHandler() HandlerFunc {
func (s *Server) Process(ctx context.Context, in *pb.Request) (*pb.Response, error) {
//do processing
}
}
type Server struct {
Handler handler
}
func new() (s *Server) {
return &Server{
handler: handlers.newHandler()
}
}
func (s *Server) Process(ctx context.Context, in *pb.Request) (*pb.Response, error) {
return s.handler
}
现在假设多个客户端尝试调用 Process 端点。是全部调用同一个服务器实例的相同Process函数还是调用不同服务器实例的Process函数?
也是
中定义的处理程序func newHandler() HandlerFunc {
func (s *Server) Process(ctx context.Context, in *pb.Request) (*pb.Response, error) {
//do processing
}
}
处理程序的同一个实例是否处理来自同一个客户端的多个请求?还有不同的客户呢?处理程序的同一个实例是否处理来自多个客户端的请求?
【问题讨论】:
-
“服务器的不同实例”是什么意思?您是否正在运行多个服务器实例?如果您只运行一个服务器实例,则它们由同一服务器实例处理。至于使用“处理程序的同一实例”,这并没有什么意义,因为处理程序只处理一个请求。处理程序针对并发请求同时运行,如果这是您所要求的。
-
@JimB。是的多个请求。那么对于每个请求都会创建一个新的处理程序实例吗?如果我必须在多个请求之间共享内容怎么办。我该怎么做?