Maintain sessions with zerorpc

1k views Asked by At

How do I maintain different sessions or local state with my zerorpc server?

For example (below), if I have a multiple clients, subsequent clients will overwrite the model state. I thought about each client having an ID, and the RPC logic will try to separate the variables that way, but tbis seems messy and how would I clear out old states/variables once the clients disconnect?

Server

import zerorpc
import FileLoader

class MyRPC(object):
    def load(self, myFile):
        self.model = FileLoader.load(myFile)
    def getModelName(self):
        return self.model.name

s = zerorpc.Server(MyRPC())
s.bind("tcp://0.0.0.0:4242")
s.run()

Client 1

import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
c.load("file1")
print c.getModelName()

Client 2

import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
c.load("file2") # AAAHH! The previously loaded model gets overwritten here! 
print c.getModelName()
1

There are 1 answers

0
SImon Fong On

Not sure about sessions...but if you want to get back different models? Maybe you could just have once function that instantiates a new Model()?

import zerorpc
import FileLoader

models_dict ={}  # Keep track of our models

def get_model(file):
    if file in models_dict:
        return models_dict[file]
    models_dict[file] = MyModel(file)
    return model

class MyModel(object):

    def __init__(self, file):
        if file:
            self.load(file)

    def load(self, myFile):
        self.model = FileLoader.load(myFile)

    def getModelName(self):
        return self.model.name

s = zerorpc.Server(<mypackagename.mymodulename>)  # Supply the name of current package/module
s.bind("tcp://0.0.0.0:4242")
s.run()

Client:

import zerorpc

c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
print c.get_model("file1")