一、檔案結構
server端和client端分布在兩個不同的集群裡,可以通過下發mq訊息,或者grpc連線傳遞訊息,這裡介紹通過grpc建立連線,第一步是建立proto檔案,要傳遞的方法和變數都在這裡定義
senddata/
├── data.proto
└── log
二、建立data.proto檔案
注意,如果server端和client端不在同一集群,兩邊都要建立proto檔案
syntax =
"proto3"
;//指定protobuf的版本
package senddata;
//宣告乙個包名,一般與檔案目錄名相同
// service裡定義建立連線的方法sayhello
service connect
}// 定義傳遞結構體
message hellorequest
message data
message helloreply
執行:protoc --go_out=plugins=grpc:. data.proto
執行完畢後目錄結構
senddata/
├── data.proto
├── data.pb.go
└── log
三、建立client.go
package main
import
("log"
"os"
pb "amber/senddata"
"golang.org/x/net/context"
"google.golang.org/grpc"
)const
( address =
"localhost:50001"
)func
main()
defer conn.
close()
//一定不忘忘記關閉連線
c := pb.
newconnectclient
(conn)
if c==
nil//生成的pb.go裡的結構體可以被外部引用
data:=
&pb.data
resp, err := c.
sayhello
(context.
background()
,&pb.hellorequest
)if err !=
nil//列印helloreply裡message的內容
log.
println
(resp.message)
}
四、建立server.gopackage main
import
("log"
"net"
pb "amber/senddata"
"google.golang.org/grpc"
"golang.org/x/net/context"
)const
( port =
":50001"
)type server struct
//定義空結構體,關聯server服務
// 重寫sayhello方法
func
(s *server)
sayhello
(ctx context.context, in *pb.hellorequest)
(*pb.helloreply,
error),
nil}
func
main()
s := grpc.
newserver()
pb.registerconnectserver
(s,&server
)//註冊服務到grpc的sever端,registerconnectserver是proto裡service生成
log.
println
("rpc服務已經開啟"
) s.
serve
(lis)
//建立連線,開始服務
}
簡單的server和client模型
本 主要有一下幾個技術的解決方案 埠復用技術 防止tcp流協議粘包 我們使用的是指定buf大小的方式 include include include include include include include include include define err exit m do while ...
最簡單client和server通訊程式
開兩個vc或者建兩個工程,先執行server再執行client server端 include include pragma comment lib,ws2 32.lib void main else socket sersocket socket af inet,sock stream,0 建立了...
scroll offset和client如何區分
title 比較 1.clientx與clienty window.nl ad function oevent.clientx是指滑鼠到可視區左邊框的距離。oevent.clienty是指滑鼠到可視區上邊框的距離。2.offsetwidth offsetheight offsetleft和offse...