2011-11-18 103 views
1

我正在探索jsonrpc 2的Web服务。我有一些java rmi的经验,非常喜欢。为了让事情变得简单,我使用zend框架,所以我想我喜欢使用该库。然而有一件事我错过了。我如何让一个程序发回一个对其他对象的引用。jsonrpc2返回远程参考

我得到这不是在协议内,因为它关于程序,但它仍然是一个有用的事情。与java rmi一样,我可以选择通过值(serialize)或引用(远程对象代理)发送的对象。那么解决这个问题的最好方法是什么?这是大多数图书馆使用的标准吗?

我花了一个小时在谷歌寻找这个,可以想到一个解决方案(如返回一个url),但是,我宁愿使用标准,然后设计新的东西。

还有一件事我想你的意见。我听到一位建筑师兰德关于协议发送批量呼叫的功能。被认为是好还是不好? (他认为他们在哪里难看,但我能想到用了那么)

更新

我觉得nicesed方式就是返回的RemoteRef对象与URL对象。这样它只是一个小包装和一个小文件。然而,我想知道是否有一个平常的方法来做到这一点。

SMD Posibilitie的

可能有一些方法来指定在我的SMD返回类型,是否有任何人如何在我的SMD返回类型给另一个页面的引用idears?或者是否有人知道zend_json_smd类的良好补充?

回答

0

您不能通过JSON-RPC返回任何类型的引用。

因为RPC是无状态的,所以没有这样做的标准(afaik),大多数开发人员更喜欢这种方式。这种简单性使JSON-RPC对客户端开发人员来说非常适合SOAP(以及其他混乱)。

然而,您可能会在您的返回值中采用一种约定,即某些JSON构造应被视为制造远程“对象”代理的“线索”。例如,你可以创建一个修改的JSON解串行器,轮流:

{ 
    "__remote_object": { 
     "class":  "Some.Remote.Class", 
     "remote_id": 54625143, 
     "smd":  "http://domain/path/to/further.smd", 
     "init_with": { ... Initial state of object ... } 
    } 
} 

到远程对象代理的:

  • 创建与class命名的原型局部对象,通过init_with
  • 初始化
  • 正在下载&处理smd URL
  • 为通过API公开的每个过程创建本地代理方法(在对象代理中),使得它们pa SS的remote_id与每个呼叫服务器(使得服务器知道哪些远程对象代理映射到哪个服务器侧对象。)

虽然这种方案将是可行的,有大量的活动部件,并且代码在客户端比在普通的JSON-RPC中要大得多和复杂得多。JSON-RPC本身并没有很好的标准化,所以大多数扩展(甚至SMD)仅仅是方法名称和有效载荷的约定。

+0

这是一个很好的解决方法是的。到现在我的项目是statele,并保持代码更好。但是这是在远程引用处“暗示”的一种很好的方式。 (回复晚了非常抱歉) – Bram