實現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)

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章