Tars-go支持Tars协议和TarsUp协议,TarsUp是TUP(Tars Unified Protocol)的简称,是一种高效的跨语言跨平台的RPC通讯协议。
TarsUp协议的使用主要涉及到服务端和客户端的编解码过程。以下是一个简单的示例,展示如何在Tars-go中使用TarsUp协议。
服务端示例代码:
package main
import (
"fmt"
"github.com/TarsCloud/TarsGo/tars"
"main/mytest"
)
func main() {
comm := tars.NewCommunicator()
obj := fmt.Sprintf("tars.tarsprotocol.TestServerObj@tcp -h 127.0.0.1 -p 18601")
app := new(mytest.Test)
comm.StringToProxy(obj, app)
req := new(mytest.RequestPacket)
req.IRequest = new(mytest.Request)
req.SRequestName = "hello"
req.IRequest.Reset(tars.TARSMEMORY_SHARE)
req.IRequest.WriteString("hello tars")
resp := new(mytest.ResponsePacket)
ret, err := app.Test(req, resp)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("ret:", ret)
fmt.Println("resp:", resp.SBuffer.String())
}
}
客户端示例代码:
package main
import (
"fmt"
"github.com/TarsCloud/TarsGo/tars"
"main/mytest"
)
func main() {
comm := tars.NewCommunicator()
obj := fmt.Sprintf("tars.tarsprotocol.TestServerObj@tcp -h 127.0.0.1 -p 18601")
app := new(mytest.Test)
comm.StringToProxy(obj, app)
req := new(mytest.RequestPacket)
req.IRequest = new(mytest.Request)
req.SRequestName = "hello"
req.IRequest.Reset(tars.TARSMEMORY_SHARE)
req.IRequest.WriteString("hello tars")
resp := new(mytest.ResponsePacket)
ret, err := app.Test(req, resp)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("ret:", ret)
fmt.Println("resp:", resp.SBuffer.String())
}
}
在这个示例中,我们创建了一个Tars-go的客户端,并使用TestServerObj服务的代理对象进行RPC调用。我们设置请求包(RequestPacket)和响应包(ResponsePacket),然后调用服务端的Test方法。
注意:
- 示例中的
mytest
包是由Tars-go的代码生成工具根据服务端的.tars文件自动生成的。 - 服务端和客户端的服务对象(TestServerObj)和方法(Test)需要与服务端的定义相匹配。
- 示例中的服务地址(127.0.0.1:18601)和服务对象名称(tars.tarsprotocol.TestServerObj)需要根据实际部署的服务进行替换。