RPC implementation for Nim based on msgpack4nim



Build Status

RPC implementation for Nim based on msgpack4nim created by @jangko.


Pre Requirement

Nimble package manager installed

Install Command

nimble install nimrpc


RPC Server

import nimrpc/rpc_server, nimrpc/rpc_type, asyncnet, asyncdispatch, msgpack

# Define your remote proc
# Remote porc must have two params, first is input, second is output (so it's var param).
# Return value must be an int as error code, for example, 0 for success, -1 for error.
proc remoteAdd(param: tuple[v1: int, v2: int], ret: var int): int =
  ret = param.v1 + param.v2
  result = 0

# Create the server
# Currently procs must be resgistered before rpc server starts running.
# Running time proc register will be added in later version
var server = newRpcServer("", Port(4343)) # server listen to
server.register("add", remoteAdd) # register remoteAdd to RPC server binding name "add"
asyncCheck # run RPC server

RPC Client

import nimrpc/rpc_client, nimrpc/rpc_type, net, asyncdispatch

proc main =
  var client = newRpcClient("", Port(4343)) # client send request to
  var ret: int
  var state ="add", (1, 2), ret) # client remote call add
  # Check remote call state first, only process ret value when state == Correct
  if state == Correct:
    echo($state) # output: Correct
    echo($ret) # output: 3

if isMainModule == true:

RPC Async Client

Due to nim compiler bug, async client is not supported currently. It will be added in later version once the bug gets fixed.

Need help? Read Nimble
No tagged versions available
License: MIT

Project website Hosted docs