2013-10-31 58 views
2

如何使用我的zerorpc服务器维护不同的会话或本地状态?例如(如下),如果我有多个客户端,后续客户端将覆盖模型状态。我想过每个客户端都有一个ID,RPC逻辑会试图以这种方式分离变量,但是tbis似乎很混乱,一旦客户端断开连接,我将如何清除旧状态/变量?与zerorpc保持会话

服务器

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

客户端1

import zerorpc 

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

客户端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() 
+0

我真的希望这个问题得到了妥善的回答。似乎没有简单的方法来访问底层的zeromq会话,这可能有助于维护每个会话的附加状态。也许好的会话令牌将不得不完成这项工作。 –

回答

-1

有关会话不知道......但如果你w ^蚂蚁找回不同的模型?也许你可能只有一个实例化新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() 

客户:

import zerorpc 

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