Go net / rpc库documentation可以通过原始网络连接或HTTP通过网络公开对象。
arith := new(Arith)
rpc.Register(arith)
rpc.HandleHTTP()
l, e := net.Listen("tcp", ":1234")
if e != nil {
log.Fatal("listen error:", e)
}
go http.Serve(l, nil)
arith := new(Arith)
rpc.Register(arith)
l, e := net.Listen("tcp", ":1234")
if e != nil {
log.Fatal("listen error:", e)
}
go func() {
for {
conn, err := l.Accept()
go rpc.ServeConn(conn)
}
}
要调用第一种类型的服务器,可以使用rpc.DialHTTP(“tcp”,“127.0.0.1:1234”),第二种类型使用rpc.Dial(“tcp”,“127.0.0.1:1234”) )将被使用。
我的问题是这两者有何不同?运行HTTP服务器与“原始网络连接”服务器有什么优缺点?可以通过curl或浏览器以某种方式使用HTTP执行RPC吗? HTTP版本对跨语言RPC调用有用吗?
答案 0 :(得分:9)
这个问题的答案很好地描述了HTTP和原始TCP之间的差异(不直接与Go有关)。
它基本上说由于HTTP是用于标准化的TCP之上的一层,如果你计划让你的代码有一个网页试图发出请求并处理响应,那么你应该使用它,但是如果你关心的话关于速度,关闭HTTP并使用原始TCP。