gRPC 和 Gin 同时作为服务器
小于 1 分钟
是这样的,我想让我的Gin
后端同时也作为gRPC
的provider
那么在一个程序中监听两个端口这个时候就出问题了
package main
import (
"mio-api/routes"
"mio-api/server"
)
func main() {
// 启动rpc服务器
server.StartRPC()
// 启动gin服务器
routes.StartGin()
}
无论我怎么调整这两行代码的顺序 gRPC
的服务器总是起不来,原本的代码如下
package server
import (
"fmt"
"google.golang.org/grpc"
pb "mio-api/proto"
"net"
)
type RPCServer struct {
pb.UnimplementedMioApiServer
}
func StartRPC() {
// 开启grpc端口监听
// 开启端口
listen, _ := net.Listen("tcp", ":2175")
// 创建grpc服务
newServer := grpc.NewServer()
pb.RegisterMioApiServer(newServer, &RPCServer{})
// 启动服务
err := newServer.Serve(listen)
if err != nil {
fmt.Println("[Error] 启动grpc服务器失败! ", err.Error())
}
}
解决方案,得把启动gRPC
服务的代码丢进goroutine
中运行:
// 启动服务
go func() {
err := newServer.Serve(listen)
if err != nil {
fmt.Println("[Error] 启动grpc服务器失败! ", err.Error())
}
}()