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)
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