https://github.com/blakeliafk/prpc
protobuf rpc
https://github.com/blakeliafk/prpc
Last synced: 3 months ago
JSON representation
protobuf rpc
- Host: GitHub
- URL: https://github.com/blakeliafk/prpc
- Owner: BlakeLiAFK
- Created: 2023-07-21T12:28:43.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2023-07-21T14:04:40.000Z (almost 2 years ago)
- Last Synced: 2025-02-07T08:23:32.005Z (4 months ago)
- Language: C#
- Size: 17.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# prpc
protobuf rpc```
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative rpc.proto
`````` go
// 连接 grpc
cli := prpc.NewRPCClient(prpc.WithConnectAddress("localhost:50051"))// ssl
cli := prpc.NewRPCClient(prpc.WithConnectAddress("prpc.test.com:443"),prpc.WithConnectTLSSkipCheck())
`````` nginx
// nginx conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name prpc.test.com;# SSL
ssl_certificate /etc/ssl/wildcard.test.com.crt;
ssl_certificate_key /etc/ssl/wildcard.test.com.key;underscores_in_headers on;
# reverse proxy
location / {
grpc_read_timeout 300s;
grpc_send_timeout 300s;
grpc_socket_keepalive on;
grpc_pass grpc://127.0.0.1:50051;
}
}```
## 使用方式
### 1. 定义pb文件
```
syntax = "proto3";option go_package = "pb/";
message PingMessage {
string name = 1;
}
```### 2. 编译pb
```
protoc --go_out=./pb --go_opt=paths=source_relative message.proto
```### 3. server
```
type H struct{}
func (h *H) HandleStreamConnected(context prpc.RPCStreamContext) {}
func (h *H) HandleStreamDisconnected(context prpc.RPCStreamContext) {}
func (h *H) HandleRequest(ctx prpc.RPCRequestContext) {
ctx.Reply(200, ctx.Message())
}
func main() {
handler := &H{}
s := prpc.NewServer(handler, prpc.WithListenAddress(":50051"))
s.Start()
}
```### 4. client
```
func main() {
cli := prpc.NewRPCClient(prpc.WithConnectAddress("127.0.0.1:50051"))
err := cli.Connect()
if err != nil {
fmt.Println(err)
return
}
for {
call := cli.Request("math.add", &pb.PingMessage{
Name: "Hello",
}, time.Hour)
if call.Error != nil {
fmt.Println(call.Error)
} else {
fmt.Println(call.Status, call.Message)
}
time.Sleep(time.Second)
}
}
```