joint api

Server side

gevent

Easiest server with blocking loop

from joint import GeventServer

class Obj(object):
   def mult(self, i):
      return i * 2

srv = GeventServer(bind=('', port=12345))
srv.mount('', Obj())
srv.loop()

Controlled event loop

import gevent
from joint import GeventServer

srv = GeventServer(bind=('', 12345))
srv.mount('mult', lambda i: i * 2)

grn = gevent.spawn(srv.loop)

# Once you want to stop loop and wait all pending requests
srv.stop()
grn.join()

External event loop

import zeromq
from joint import Dispatcher

sck = zeromq.Context().socket(zmq.ZMQ_REP)

dsp = Dispatcher()

while True:
    res = dsp.dispatch(sck.recv())
    if res is not None:
       sck.send(res)

Client side

gevent

from joint import GeventClient, RPC

cli = GeventClient(('localhost', 12345))
cliobj = RPC(cli)

assert cli.call('mult', 2) == cliobj.mult(2) == 4

cli = GeventClient(('localhost', 12345))
assert cli.call('mult', 2) == 4

cli = GeventClient(('localhost', 12345))
cli.ping()  # Will force connection here

assert cli.call('mult', 3) == 9
assert cli.list() == ('mult', )

cli.setWizardMode(True)
assert cli.mult(4) == 16

cli.magic