# README
jsonrpc

JSON RPC 2.0 的实现,目前实现了对以下传输层的接口:
- socket, net 包中所有支持 Conn 接口的实现;
- websocket, 采用了 github.com/gorilla/websocket 作为底层调用;
- HTTP 普通的 HTTP 请求方式;
目前不支持批处理模式!
Socket
srv := NewServer()
listen, err := net.Listen("tcp", ":8080")
for {
c, err := listen.Accept()
conn := srv.NewConn(NewSocketTransport(true, c), nil)
conn.Serve(ctx)
// 主动请求客户端
conn.Send("/method", in, func(result *result) error {
// 此处用于处理返回的数据
})
}
HTTP
srv := NewServer()
conn := srv.NewHTTPConn(nil)
http.Handle(conn)
安装
go get github.com/issue9/jsonrpc
版权
# Functions
NewError 新的 Error 对象.
NewErrorWithData 新的 Error 对象.
NewErrorWithError 从 err 构建一个新的 Error 实例
如果 err 本身就是 *Error 实例,则会直接返回该对象。.
NewServer 新的 [Server] 实例.
NewSocketTransport 声明基于 net.Conn 的 Transport 实例
HTTP、UDP 和 websocket 有专门的实现方法。
timeout 可以使读取数据时拥有超过的功能。 Conn.Serve() 通过 context.WithCancel 中断当前的服务,但是该功能可能由于 net.Conn.Read() 方法阻塞而无法真正中断服务,timeout 指定了 net.Conn.Read() 方法在无法读取数据是的超时时间。.
NewStreamTransport 返回基于流的 Transport 实例
header 是否需要解析报头内容; close 指定了关闭 in 和 out 的函数,如果不需要关闭,则可以传递 nil 值。.
NewUDPClientTransport 声明用于客户的 UDP Transport 接口
这是对 [NewUDPTransport] 的二次封装,返回适用于客户端的接口实例, 其中的 conn 参数由 [net.DialUDP] 创建,而 connected 统一为 true。
raddr 用于指定服务端地址;laddr 用于指定本地地址,可以为空值。 timeout 指定了 udp 在无法读取数据时的超时时间。.
NewUDPServerTransport 声明用于服务的 UDP Transport 接口
这是对 [NewUDPTransport] 的二次封装,返回适用于服务端的接口实例, 其中的 conn 参数由 [net.ListenUDP] 创建,而 connected 统一为 false。 timeout 指定了 udp 在无法读取数据时的超时时间。.
NewUDPTransport 创建 UDP 传输层
UDP 作为服务端是无状态的,在客户端发送一次请求之后,才能发送信息给客户端, 且之后如果有新的客户端请求过来,则发送的目标不地址也会变化。在多客户端环境中, 服务端如果有下发数据的行为,接收方是无法保证的。
header 表示是否需要输出报头内容目前报头包含了长度和编码两个字段, 如果不包含报头,则是一段合法的 JSON 内容。 connected 表示 conn 是否是有状态的,如果是调用 [net.ListenUDP] 生成的实例,是无状态的; [net.DialUDP] 返回的则是有状态的连接。 timeout 指定了 udp 在无法读取数据时的超时时间。.
NewWebsocketTransport 声明基于 websocket 的 Transport 实例.
# Constants
JSON RPC 2.0 定义的错误代码.
JSON RPC 2.0 定义的错误代码.
JSON RPC 2.0 定义的错误代码.
JSON RPC 2.0 定义的错误代码.
JSON RPC 2.0 定义的错误代码.
Version JSON RPC 的版本.
# Interfaces
Transport 用于操作 JSON RPC 的传输层接口
传输层主要包括了对客户端数据的读写操作。.