gpt4 book ai didi

mongodb - 如何将 mongodb session 放入 creachadair/jrpc2 处理程序中

转载 作者:行者123 更新时间:2023-12-01 22:29:01 25 4
gpt4 key购买 nike

我想构建一个使用 jrpc2 和 mongodb 来管理小型物联网设备的微服务。这些是有问题的库:

https://godoc.org/bitbucket.org/creachadair/jrpc2

https://godoc.org/github.com/globalsign/mgo

问题是,总的来说,我对 Golang 相当陌生,我不确定如何将这些东西结合在一起。这是我的代码:

func DeviceAdd(ctx context.Context) (map[string]string, error) {
m := make(map[string]string)
m["token"] = "0xdeadbeef"
return m, nil
}

func DeviceBootstrap(ctx context.Context, params map[string]string) (map[string]string, error) {
m := make(map[string]string)
m["entered_token"] = params["token"]
return m, nil
}
...
func NewServer() *jrpc2.Server {
assigner := jrpc2.MapAssigner{
"device_add": jrpc2.NewHandler(DeviceAdd),
"device_bootstrap": jrpc2.NewHandler(DeviceBootstrap),
"device_update": jrpc2.NewHandler(DeviceUpdate),
"device_get_status": jrpc2.NewHandler(DeviceGetStatus),
}
srv := jrpc2.NewServer(assigner, nil)
return srv
}

基本上,您编写一些接受 context.Context 或任何其他 JSON-RPC 参数的基本函数,jrpc2.NewHandler(function) 会将它们附加到 jrpc2.Server。

问题是,我无法更改函数处理程序签名以将 mgo.Session 放在那里。或者我应该创建一个结构的 DeviceAdd/DeviceBootstrap 方法,它可以访问 mgo.Session?

根据 another StackOverflow question ,似乎我应该为具有mgo.Session的结构创建DeviceAdd/DeviceBootstrap方法,但我真的不确定我是否理解正确,或者jrpc2.NewHandler是否会接受新转换的方法,或者它是否正确要做的事。此外,Golang 的 context.Context 似乎是放置此类东西的正确位置。帮助!

最佳答案

任何实现 jrpc2.Handler 的值都可以处理请求。界面。也许最简单的方法来适应 mgo.Session到这个接口(interface)的方法是将它包装在一个结构中,例如,

type SessionHandler struct {
mgo.Session
}

func (s SessionHandler) Handle(ctx context.Context, req *jrpc2.Request) (interface{}, error) {
// whatever you want your handler to do, using the s.Session
// as a delegate.
}

然后你可以写这样的东西:

a := handler.Map{"DoAThing": SessionHandler{s}}

将其插入您的服务器。

关于mongodb - 如何将 mongodb session 放入 creachadair/jrpc2 处理程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54025725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com