如何进行同步RPC调用
我正在开发一个程序,这个程序里有一个类是用来本地使用的,但我希望这个类也能通过网络以相同的方式使用。这意味着我需要能够同步调用它的任何公共方法。这个类会读写文件,所以我觉得用XML-RPC会有点复杂。我用Twisted的例子创建了一个基本的RPC客户端/服务器,但在客户端这部分遇到了一些问题。
c = ClientCreator(reactor, Greeter)
c.connectTCP(self.host, self.port).addCallback(request)
reactor.run()
这个设置在进行一次调用时是有效的,当数据接收到后我调用了reactor.stop(),但是如果我再进行其他调用,reactor就无法重新启动了。我是不是应该使用其他的东西呢?也许是不同的Twisted模块或者其他框架?
(我没有包括协议是如何工作的细节,因为主要问题是我只得到了一次调用的结果。)
补充说明:
我分享了一个Google文档,里面有我正在做的事情的笔记。http://docs.google.com/Doc?id=ddv9rsfd_37ftshgpgz
我已经写了一个版本,使用fuse可以将多个本地文件夹合并到fuse挂载点。文件访问已经在一个类中处理,所以我想要有服务器可以让我通过网络访问同一个类。经过进一步搜索,我怀疑pyro(http://pyro.sourceforge.net/)可能正是我真正需要的(仅仅是根据我现在阅读他们主页的内容)但我也欢迎任何建议。
我可以通过使用nfs挂载并将其与我的本地文件夹结合来实现类似的结果,但我希望所有的节点都能访问相同的合并文件系统,这样就需要每台计算机都成为一个nfs服务器,并且有与网络中计算机数量相等的nfs挂载。
结论:我决定使用rpyc,因为它正好满足了我的需求。一个服务器可以保持一个类的实例,我可以像操作本地一样操作它。如果有人感兴趣,我把我的项目放在了Launchpad上(http://launchpad.net/dstorage)。
4 个回答
暂无回答