【问题标题】:Maintain sessions with zerorpc使用 zerorpc 维护会话
【发布时间】:2013-10-31 05:46:51
【问题描述】:

如何使用我的zerorpc 服务器维护不同的会话或本地状态?

例如(下),如果我有多个客户端,后续客户端将覆盖模型状态。我想过每个客户端都有一个 ID,RPC 逻辑会尝试以这种方式分离变量,但 tbis 似乎很混乱,一旦客户端断开连接,我将如何清除旧状态/变量?

服务器

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

【问题讨论】:

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

标签: python zeromq zerorpc


【解决方案1】:

不确定会话...但是如果您想返回不同的模型?也许你可以只拥有一个实例化新 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")

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 2013-10-06
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多