【发布时间】:2013-11-07 12:47:13
【问题描述】:
Go net/rpc 库 documentation 可以通过原始网络连接或 HTTP 跨网络公开对象。
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)
原始 TCP 网络连接
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 调用有用吗?
【问题讨论】:
标签: http networking tcp go rpc