Skip to content

Commit 879ac8f

Browse files
committed
Bi-directional streaming: add client
1 parent 5e05bb6 commit 879ac8f

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed
+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package proto
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package server

0 commit comments

Comments
 (0)