【发布时间】:2018-11-22 13:55:24
【问题描述】:
我正在使用 google 的协议缓冲区将数据从客户端发送到服务器。
客户端和服务器都是用 Golang 编写的。
我认为它使用纯 tcp 将数据从 client 发送到 server。
示例客户端代码:
func getFakeTransaction() *proto.Transaction {
transaction := new(proto.Transaction)
transaction.ClientId = "client_1"
transaction.ClientName = "Europa"
items := new(proto.Items)
items.ItemId = 1
items.ItemName = "Space suite"
items.ItemValue = 2000
transaction.Items = items
return transaction
}
func readDataFromExternalDatasource() *proto.Transaction {
return getFakeTransaction()
}
func sentDataToServer(data []byte) {
conn, err := net.Dial("tcp", "localhost:8080")
defer conn.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "Error while dialing server: %s\n", err.Error())
return
}
sentBytes, err := conn.Write(data)
if err != nil {
fmt.Fprintf(os.Stderr, "Error sending bytes to serve: %s\n", err.Error())
return
}
fmt.Printf("Sent %d bytes\n", sentBytes)
}
func main() {
fmt.Println("Starting client..")
data := readDataFromExternalDatasource()
dataInByteArr, err := protoc.Marshal(data)
if err != nil {
fmt.Fprintf(os.Stderr, "Error while Marshal data: %s", err.Error())
}
for {
sentDataToServer(dataInByteArr)
time.Sleep(1000)
}
}
如何使用 Golang 中的协议缓冲区通过 HTTP 将数据从客户端发送到服务器?
【问题讨论】:
-
您的代码建立了一个 tcp 连接(参见 net.Dial 中的文字
"tcp")。那么问题是什么? -
“Protocol Buffers”本质上是协议——它甚至在名称中包含协议 :)
-
我们可以通过 http 使用协议缓冲区
-
是的,你可以。但为什么呢?
-
我建议你谷歌“protobuf 是如何工作的?”并从那里开始。这里有工作示例,例如github.com/golang/protobuf
标签: go network-programming protocols protocol-buffers network-protocols