老师我这里可以说有两个问题 :
1去除go 关键词 运行程序 http 服务可以启动 正常返回json 数据但是 (tcp 和 http 不能并行执行)
2 加入go 关键词 运行程序 tcp服务正常返回结果 运行服务 http 浏览器报 ERR_CONNECTION_REFUSED
(感觉不是防火墙的问题,因为去处go 关键词 运行服务http 也能正常执行)
有go 关键词的代码 http.ListenAndServe 后面也打印过 数据 (程序没有走到)
我是直接抄的课程代码 对比好几次,现在的问题是
可以运行,没有报错, 但是浏览器访问不了,我开始也以为是防火墙等问题,然后去掉了 go关键字后运行,浏览器是可以访问的,卡在startGrpcGateway处
func main() {
//go http.ListenAndServe(":8080", nil)
startGrpcGataway()
//客户端启用一个链接端口
client, err := grpc.Dial("localhost:8082", grpc.WithInsecure())
if err != nil {
log.Fatalf("监听端口错误:%s", err)
}
//启用trip的监听服务
tripClient := trippb.NewTripServerClient(client)
//s实现trip方法
respon, err := tripClient.GetTrips(context.Background(), &trippb.GetTripRequest{Id: "abd1231"})
if err != nil {
log.Fatalf("向服务端发送请求错误:%s", err)
}
fmt.Println(respon)
}
func startGrpcGataway() {
fmt.Println(1231321)
c := context.Background()
c, cancel := context.WithCancel(c)
defer cancel()
Mux := runtime.NewServeMux(
runtime.WithMarshalerOption(
runtime.MIMEWildcard, &runtime.JSONPb{
protojson.MarshalOptions{
UseEnumNumbers: true,
UseProtoNames: true,
},
protojson.UnmarshalOptions{},
},
))
err := trippb.RegisterTripServerHandlerFromEndpoint(
c,
Mux,
":8082",
[]grpc.DialOption{grpc.WithInsecure()},
)
if err != nil {
log.Fatalf("注册服务链接:%v", err)
}
fmt.Println(3333)
//启用客户端http监听服务
err = http.ListenAndServe(":8080", Mux)
// fmt.Println(4444)
if err != nil {
log.Fatalf("监听客户端服务:%v", err)
}
}
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星