我使用Thruway客户端注册RCP过程并使用Autohahn客户端调用它。
我遇到的问题是当被调用者从过程return array();
返回一个空数组时,调用者会收到null
值。
当被调用者返回单元素数组return array(['foo' => 'bar', 'baz' => 'quux']);
时,调用者会接收到未包含在数组中的对象。
只返回数组中的多个对象按预期工作:调用者接收一个对象数组。
这绝对不方便且不直观:我必须检查响应是否已定义,是否为数组...我希望调用者接收我实际从被调用者发送的内容:空数组,一个元素的数组和多个元素的数组。我发送一个数组 - 我希望客户端得到一个数组。
问题是:如何解决这个问题?我甚至不确定这两个客户端中哪一个配置错误。或者这可以在路由器上配置(我使用Crossbar作为路由器)。或者这可能是协议的预期实现(这将是非常糟糕的)。
答案 0 :(得分:1)
刚刚与两个Autobahn客户(Autobahn | JS,但在这方面的行为在Autobahns中的行为相同)和Crossbar.io进行了测试。这会产生一个空数组,一个包含一个元素的数组和一个包含多个元素的数组。
这是符合规范的行为:调用者接收来自被调用者的内容。路由器对有效负载执行的唯一修改是在需要时更改序列化。