Skip to content

Commit a70ee32

Browse files
committed
1 parent b335ab9 commit a70ee32

File tree

12 files changed

+927
-15
lines changed

12 files changed

+927
-15
lines changed

_examples/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@
251251
* [Websocket Controller](mvc/websocket)
252252
* [Register Middleware](mvc/middleware)
253253
* [gRPC](mvc/grpc-compatible)
254+
* [gRPC Bidirectional Stream](mvc/grpc-compatible-bidirectional-stream)
254255
* [Login (Repository and Service layers)](mvc/login)
255256
* [Login (Single Responsibility)](mvc/login-mvc-single-responsibility)
256257
* [Vue.js Todo App](mvc/vuejs-todo-mvc)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
pb "grpcexample/helloworld"
8+
9+
"google.golang.org/grpc"
10+
"google.golang.org/grpc/credentials"
11+
)
12+
13+
func main() {
14+
// Set up a connection to the server.
15+
cred, err := credentials.NewClientTLSFromFile("../server.crt", "localhost")
16+
if err != nil {
17+
panic(err)
18+
}
19+
20+
conn, err := grpc.Dial("localhost:443", grpc.WithTransportCredentials(cred), grpc.WithBlock())
21+
defer conn.Close()
22+
23+
client := pb.NewGreeterBidirectionalStreamClient(conn)
24+
stream, err := client.SayHello(context.Background())
25+
if err != nil {
26+
panic(err)
27+
}
28+
29+
waitCh := make(chan struct{})
30+
31+
// Implement the send channel.
32+
// As an exercise you can implement the read channel one (reading from server, see the server/main.go).
33+
go func() {
34+
for {
35+
println("Sleeping for 2 seconds...")
36+
time.Sleep(2 * time.Second)
37+
println("Sending a <test> msg...")
38+
msg := &pb.HelloRequest{Name: "test"}
39+
40+
err = stream.Send(msg)
41+
if err != nil {
42+
panic("stream.Send: " + err.Error())
43+
}
44+
}
45+
}()
46+
47+
<-waitCh
48+
stream.CloseSend()
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module grpcexample
2+
3+
go 1.15
4+
5+
// replace github.com/kataras/iris/v12 => ../../../
6+
7+
require (
8+
github.com/golang/protobuf v1.4.2
9+
github.com/kataras/iris/v12 master
10+
google.golang.org/grpc v1.33.1
11+
google.golang.org/protobuf v1.25.0
12+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
syntax = "proto3";
2+
3+
package helloworld;
4+
5+
option go_package = ".;helloworld";
6+
7+
// The request message containing the user's name.
8+
message HelloRequest {
9+
string name = 1;
10+
}
11+
12+
// The response message containing the greetings
13+
message HelloReply {
14+
string message = 1;
15+
}
16+
17+
// The greeting service definition.
18+
service Greeter {
19+
// Sends a greeting
20+
rpc SayHello (HelloRequest) returns (HelloReply) {}
21+
}
22+
23+
// The greeting service definition. (Server-side streaming RPC)
24+
service GreeterServerSideSStream {
25+
// Sends a greeting
26+
rpc SayHello (HelloRequest) returns (stream HelloReply) {}
27+
}
28+
29+
// The greeting service definition. (Client-side streaming RPC)
30+
service GreeterClientSideStream {
31+
// Sends a greeting
32+
rpc SayHello (stream HelloRequest) returns (HelloReply) {}
33+
}
34+
35+
// The greeting service definition. (Bidirectional streaming RPC)
36+
service GreeterBidirectionalStream {
37+
// Sends a greeting
38+
rpc SayHello (stream HelloRequest) returns (stream HelloReply) {}
39+
}

_examples/mvc/grpc-compatible-bidirectional-stream/helloworld/helloworld.pb.go

+242
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)