【发布时间】:2015-07-14 03:03:57
【问题描述】:
我已经使用了 Go 的 net/rpc 和 net/rpc/jsonrpc 包来执行 Go 进程之间的连接,但是我想知道是否有一种方法可以仅使用标准中的服务器工具连接到 HTTP JSONRPC 服务器图书馆(不是我自己写的有问题,只是如果我不需要就不想这样做)。
这是我的基本服务器设置:
arith := new(server.Arith)
server := rpc.NewServer()
server.Register(arith)
server.HandleHTTP(rpc.DefaultRPCPath, rpc.DefaultDebugPath)
listener, e := net.Listen("tcp", ":4321")
if e != nil {
log.Fatal("listen error:", e)
}
defer listener.Close()
http.Serve(listener, http.DefaultServeMux)
我希望能够从网页或简单的命令行 CURL 调用中点击它 - 只是一个常规的 POST。
但是,这行:http://golang.org/src/net/rpc/server.go?s=20445:20475#L670 似乎表明它希望 HTTP 客户端发出 CONNECT,然后直接将 JSON RPC 请求写入流并以相同方式接收回复。我不知道这是否可以通过浏览器实现,但它肯定不像简单的 POST 那样常见或兼容。
有没有办法启动一个 JSON RPC 服务器,我可以通过 POST 来使用好的 ol' XMLHttpRequest ?
编辑:废话 - 上面甚至没有使用 jsonrpc 的东西 - 这可能是在尝试使用 Gob,但无论如何 - 问题是一样的 - src/net/rpc/server.go 中的代码不会处理 POST,因此无论服务器编解码器如何,这条路由总体上都不会起作用。
【问题讨论】: