File tree 3 files changed +67
-0
lines changed
3 files changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ package main
2
+
3
+ import (
4
+ "context"
5
+ "fmt"
6
+ pb "github.com/JaimeRC/grpc-golang/bi_directional_streaming/proto"
7
+ "google.golang.org/grpc"
8
+ "io"
9
+ "log"
10
+ "strconv"
11
+ "time"
12
+ )
13
+
14
+ const (
15
+ address = "localhost:50054"
16
+ )
17
+
18
+ func main (){
19
+ conn , err := grpc .Dial (address , grpc .WithInsecure ())
20
+ if err != nil {
21
+ log .Fatalf ("could not connect: %v" ,err )
22
+ }
23
+
24
+ c := pb .NewFeedsClient (conn )
25
+ // get client stream
26
+ stream , err := c .Broadcast (context .Background ())
27
+ if err != nil {
28
+ log .Fatalf ("failed to call Broadcast: %v" ,err )
29
+ }
30
+
31
+ // make blocking channel
32
+ waitc := make (chan struct {})
33
+
34
+ //send feeds to the stream (go routine)
35
+ go func () {
36
+ for i := 1 ; i <= 5 ;i ++ {
37
+ feed := "This is feed number " + strconv .Itoa (i )
38
+ if err := stream .Send (& pb.FeedRequest {Feed :feed });err != nil {
39
+ log .Fatalf ("error while sending feed: %v" ,err )
40
+ }
41
+ time .Sleep (time .Second )
42
+ }
43
+ if err := stream .CloseSend ();err != nil {
44
+ log .Fatalf ("failed to close stream: %v" ,err )
45
+ }
46
+ }()
47
+
48
+ // receive feeds from the streaam (go routine)
49
+ go func () {
50
+ for {
51
+ msg , err := stream .Recv ()
52
+ if err == io .EOF {
53
+ close (waitc )
54
+ return
55
+ }
56
+ if err != nil {
57
+ log .Fatalf ("failed to recieve: %v" ,err )
58
+ close (waitc )
59
+ return
60
+ }
61
+ fmt .Println ("Bew feed received: " , msg .GetFeed ())
62
+ }
63
+ }()
64
+ <- waitc
65
+ }
Original file line number Diff line number Diff line change
1
+ package proto
Original file line number Diff line number Diff line change
1
+ package server
You can’t perform that action at this time.
0 commit comments