Сеть/библиотека RPC Go документация позволяет подвергать объект через сеть, либо через сырые сетевые соединения или через 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)
Сетевое подключение Raw 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-сервера и сервера "raw network connection"? Можно ли каким-либо образом выполнить RPC через curl или браузер каким-либо образом с HTTP? Является ли версия HTTP полезной для вызова RPC с несколькими языками?