| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package main
- import(
- "context"
- "fmt"
- log "github.com/sirupsen/logrus"
- "google.golang.org/grpc"
- "io"
- "net"
- "strconv"
- "sync"
- pb "test/grpctest/proto"
- "time"
- )
- type Server struct {
- }
- //一元
- func (s *Server) GetData (context context.Context, reqData *pb.ReqData) (*pb.RepData, error){
- fmt.Println("request:",reqData.Data)
- rep := &pb.RepData{
- Data: "hello,"+reqData.Data,
- }
- return rep,nil
- }
- //服务端发送流调用
- func (s *Server) GetStream (req *pb.ReqData, rep pb.ObjectStorageService_GetStreamServer ) error{
- fmt.Println("request",req.Data)
- if req.Data == "shuai" {
- cnt := 0
- resp := &pb.RepData{
- Data: "hello,"+req.Data,
- }
- for{
- err := rep.Send(resp)
- if err != nil{
- fmt.Println("send to client failed:",err.Error())
- break
- }
- time.Sleep(time.Second)
- if cnt > 10 {
- break
- }
- cnt++
- }
- }else{
- fmt.Println("error request")
- }
- return nil
- }
- //
- func (s *Server) SetStream(req pb.ObjectStorageService_SetStreamServer) error {
- var err error
- for {
- req,err := req.Recv()
- if err != nil{
- if err == io.EOF {
- fmt.Println("server received over")
- break
- }else{
- fmt.Println("error:",err.Error())
- break
- }
- }
- fmt.Println("server received:",req.Data)
- }
- rep := &pb.ReqData{
- Data: "over",
- }
- req.SendMsg(rep)
- return err
- }
- //双向流式调用
- func (s *Server) AllStream (req pb.ObjectStorageService_AllStreamServer) error {
- wg := sync.WaitGroup{}
- wg.Add(2)
- go func() {
- defer wg.Done()
- for {
- recvMsg,err := req.Recv()
- if err != nil{
- if err == io.EOF {
- fmt.Println("server received over")
- break
- }else{
- fmt.Println("error:",err.Error())
- break
- }
- }
- fmt.Println("server received",recvMsg.Data)
- }
- }()
- go func() {
- defer wg.Done()
- cnt := 0
- for {
- err := req.Send(&pb.RepData{
- Data: "over" + strconv.Itoa(cnt),
- })
- if err != nil{
- fmt.Println("error:",err.Error())
- }
- if cnt > 3 {
- break
- }
- cnt++
- time.Sleep(time.Second)
- }
- }()
- wg.Wait()
- return nil
- }
- func main(){
- listen,err := net.Listen("tcp","127.0.0.1:10000")
- if err != nil {
- log.Fatal("server build error:",err.Error())
- }
- g := grpc.NewServer()
- pb.RegisterObjectStorageServiceServer(g,&Server{})
- err = g.Serve(listen)
- if err != nil {
- log.Fatal("failed to server:",err.Error())
- }
- }
|