【发布时间】:2020-06-16 17:42:03
【问题描述】:
我正在将现有的 http 应用程序迁移到基于 GRPC 的应用程序。一段时间以来,grpc 和 http 都将在同一个 go 文件中的不同端口上运行,我会将现有的 http 服务器部分移动到 goroutine 中。这就是它的样子。
main() {
//Move existing server into a goroutine
go func() {
s.server, err = chttp.NewHTTPSServer("443", s.certPath, s.keyPath, s.Router, s.options)
if err != nil {
log.Fatalf("server: error creating HTTP server - %v\n", err)
}
if err := s.server.Serve(); err != http.ErrServerClosed {
log.Fatalf("server: run error - %v\n", err)
}
}
// Add new grpc server
lis, err := net.Listen("tcp", ":8433")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
a := grpc.NewServer()
pb.RegisterNewServer(a, &test.GrpcServer{})
if err := a.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
这是否会导致任何问题,grpc、http 服务器可以从同一个程序同时运行吗?我不确定这是否会导致一些我不知道的问题。
【问题讨论】:
-
在同一个二进制文件中运行两台服务器就可以了。确保如果一个人死了,另一个人也应该死。 log.Fatal 应该注意这一点。
-
我没有这样做。但是我目前维护的服务的前所有者正是这样做的。还没有遇到任何与此相关的问题,已经一年半了。 :P