# hrpc **Repository Path**: wanghengwei/hrpc ## Basic Information - **Project Name**: hrpc - **Description**: 一个简单的nim-lang RPC框架。 - **Primary Language**: 其他 - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-06 - **Last Updated**: 2022-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: Nim, Framework ## README # HRPC 一个简单的`RPC`框架 # TODOs 1. 错误处理。应该采用什么样的错误处理?异常?返回值? # 例子 ## 定义服务 ```nim import hrpc # 定义一个服务`Hello` service Hello: var # 状态在`var block`里定义,无需加锁 visitors: Table[string, uint64] # 每个rpc定义为一个`async proc`,另外标注一个`rpc pragma` proc sayHi(name: string): Future[string] {.rpc, async.} = # 由于是单线程,因此这里无需加锁。注意访问状态要用`self.xxx`,这里`self`表示服务实例本身 self.visitors[name] = self.visitors.getOrDefault(name) + 1 return "hello, " & name ``` ## 服务端 ```nim # 在`127.0.0.1:19090`上创建一个入口 let lis = newListener(19090.Port) # 在此入口处创建一个rpc服务 let s = newRPCServer(lis) # 在名为hello的endpoint上绑定一个Service s.serve("hello", newHello()) waitFor lis.run() ``` ## 客户端 ```nim asyncBlock: # 创建一个stub对象,指向`127.0.0.1:19090/hello`这个endpoint挂载的服务 let stub = newHelloStub(19090.Port, "hello") # 调用并等待结果 let r = await stub.sayHi("whw") info "result is ", r runForever() ```