运行 同时使用 grpc 和 http 服务器
Running grpc and http servers simultaneously
我正在将现有的 http 应用程序迁移到基于 GRPC 的应用程序。一段时间以来,grpc 和 http 都将 运行ning 在同一个 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 服务器可以同时来自同一个程序 运行 吗?我不确定它是否会导致一些我不知道的问题。
是的,运行 从同一个二进制文件到 gRPC 和 HTTP 服务器是完全可以的,只要端口不同。
当然,如果这两个服务器在做不同的事情,最好将其分开。
如果您想对两台服务器执行相同的操作,通常使用 https://github.com/grpc-ecosystem/grpc-gateway。它读取您的 protobuf 定义并生成反向代理服务器以将 HTTP API 转换为 gRPC。
我正在将现有的 http 应用程序迁移到基于 GRPC 的应用程序。一段时间以来,grpc 和 http 都将 运行ning 在同一个 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 服务器可以同时来自同一个程序 运行 吗?我不确定它是否会导致一些我不知道的问题。
是的,运行 从同一个二进制文件到 gRPC 和 HTTP 服务器是完全可以的,只要端口不同。
当然,如果这两个服务器在做不同的事情,最好将其分开。
如果您想对两台服务器执行相同的操作,通常使用 https://github.com/grpc-ecosystem/grpc-gateway。它读取您的 protobuf 定义并生成反向代理服务器以将 HTTP API 转换为 gRPC。