go - gorilla/rpc JSON RPC 服务没有响应

标签 go rpc mux

我正在调查使用 gorilla web toolkit创建一个简单的 RPC API。我正在使用他们文档中的示例,并且正在使用 Advanced Rest Client 进行测试在 Chrome 中使用

http://localhost:1111/api/ 

并发布以下原始 JSON 负载:

{"method":"HelloService.Say","params":[{"Who":"Test"}]}

这会到达服务器,我在记录它时知道这一点(请参阅下面的代码)并且我收到 200 OK 响应。但是我收到“响应不包含任何数据”

我期待在下面的 Say 方法中定义的 JSON 回复消息。有人对问题出在哪里有任何建议吗?

package main

import (
    "gorilla/mux"
    "gorilla/rpc"
    "gorilla/rpc/json"
    "log"
    "net/http"
)  

type HelloArgs struct {
    Who string
}

type HelloReply struct {
    Message string
}

type HelloService struct{}

func (h *HelloService) Say(r *http.Request, args *HelloArgs, reply *HelloReply) error {
    log.Printf(args.Who)
    reply.Message = "Hello, " + args.Who + "!"
    log.Printf(reply.Message)
    return nil
}

func main() {
    r := mux.NewRouter()    
    jsonRPC := rpc.NewServer()
    jsonCodec := json.NewCodec()
    jsonRPC.RegisterCodec(jsonCodec, "application/json")
    jsonRPC.RegisterCodec(jsonCodec, "application/json; charset=UTF-8") // For firefox 11 and other browsers which append the charset=UTF-8
    jsonRPC.RegisterService(new(HelloService), "")
    r.Handle("/api/", jsonRPC)  
    http.ListenAndServe(":1111", r)
}

最佳答案

因为gorilla/rpc/json实现了JSON-RPC,请求中需要三个参数:methodparamsid

在 JSON-RPC 中没有 id 的请求称为通知并且没有响应。

检查 specification了解更多详情。

因此,在您的情况下,您需要使用以下 JSON:

{"method":"HelloService.Say","params":[{"Who":"Test"}], "id":"1"}

关于go - gorilla/rpc JSON RPC 服务没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17452199/

相关文章:

unit-testing - 优步 Cadence : How do I assert the call to workflow. sleep ()?

go:暴露的别名结构无法分配给内部结构文字

java - 从 'remote' 异常中的通用异常链工具中排除

database - 在 go http 的自定义处理程序中传递 *gorm.db 实例的最佳实践

c - Golang 使用 cgo 从共享 c 库调用函数

Go Getter 方法与字段,正确命名

Golang rpc获取错误的结构变量

java - 使用 Spring 的 STOMP 上的 RPC,并正确处理传播到客户端的服务器端错误

google-app-engine - go -mux,为什么路由没有解析?

generics - 使用泛型的通用 MUX 和 DEMUX