0
点赞
收藏
分享

微信扫一扫

实现grpc的unix通讯


server端

//go:generate protoc -I ../helloworld --go_out=plugins=grpc:../helloworld ../helloworld/helloworld.proto

package main

import (
"log"
"net"

"golang.org/x/net/context"
"google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
"os"
)

// server is used to implement helloworld.GreeterServer.
type server struct{}

// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}
func (s *server) SayHelloAgain(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello KingSoft " + in.Name}, nil
}

func (s *server) HelloKingSoft(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "HelloKingSoft " + in.Name}, nil
}
const (
client_file = "/tmp/client_unix"
server_file = "/tmp/server_unix"
)

func main() {
log.Println("start grpc server")
os.Remove(server_file)
//lis, err := net.Listen("tcp", port)
server_addr, err := net.ResolveUnixAddr("unix", server_file)
if err != nil {
log.Fatal("fialed to resolve unix addr")
}

lis, err := net.ListenUnix("unix", server_addr)
if err != nil {
log.Fatal("failed to listen: %v", err)
}

s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})

s.Serve(lis)
log.Println("grpc server end")


}

 

client端

package main

import (
"log"
"os"
"time"
"golang.org/x/net/context"
"google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
"net"
)

const (
client_file = "/tmp/client_unix"
server_file = "/tmp/server_unix"
)


func UnixConnect(addr string, t time.Duration) (net.Conn, error) {
unix_addr, err := net.ResolveUnixAddr("unix", server_file)
conn, err := net.DialUnix("unix", nil, unix_addr)
return conn, err
}


func main() {
log.Println("start gprc client")
time.Sleep(3 * time.Second)
os.Remove(client_file)

conn, err := grpc.Dial(server_file, grpc.WithInsecure(), grpc.WithDialer(UnixConnect))
if err != nil {
log.Fatal("did not connect: %v", err)
}
defer conn.Close()

c := pb.NewGreeterClient(conn)

name := "world"

r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})
if err != nil {
log.Fatal("could not greet: ", err)
}
log.Println(r)
log.Printf("Greeting: %s", r.Message)

}

 

举报

相关推荐

0 条评论