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)
}