2016-04-08 12 views
0

Ich registriere eine RCP-Prozedur mit dem Thruway-Client und rufe sie mit dem Autohahn-Client an.Rückgabe eines Arrays aus einer Remote-Prozedur

Das Problem, das ich konfrontiert wurde, ist, dass, wenn der Angerufene ein leeres Array von der Prozedur return array(); zurückgibt der Anrufer den null Wert erhält.

Wenn der Angerufene ein Einzelelementarray return array(['foo' => 'bar', 'baz' => 'quux']); zurückgibt, empfängt der Aufrufer das Objekt, das nicht in ein Array eingeschlossen ist.

Und nur die Rückgabe mehrerer Objekte in einem Array funktioniert wie erwartet: Der Aufrufer erhält ein Array von Objekten.

Das ist absolut unpraktisch und nicht intuitiv: Ich muss überprüfen, ob die Antwort definiert ist, ob es ein Array ist oder nicht ... Ich möchte dem Anrufer erhalten, was ich tatsächlich vom Angerufenen: ein leeres Array, ein Array eines Elements und eines Arrays aus mehreren Elementen. Ich sende ein Array - ich möchte, dass der Client ein Array bekommt.

Die Frage ist: Wie behebt man dieses Verhalten? Ich bin mir nicht einmal sicher, welcher der beiden Clients falsch konfiguriert ist. Oder vielleicht ist dies auf dem Router konfigurierbar (ich verwende Crossbar als Router). Oder vielleicht ist dies eine erwartete Implementierung des Protokolls (was einfach schrecklich wäre).

Antwort

1

Getestet wurde dies mit zwei Autobahnkunden (Autobahn | JS, ​​aber Verhalten in dieser Hinsicht ist auf Autobahnen identisch) und Crossbar.io. Dies führt zu einem leeren Array, einem Array mit einem Element und einem Array mit mehreren Elementen.

Dies ist spezifikationskonformes Verhalten: Der Anrufer empfängt, was vom Angerufenen gesendet wird. Die einzige Änderung, die der Router an der Nutzlast vornimmt, besteht darin, die Serialisierung bei Bedarf zu ändern.

+0

Danke für den Test. Ich werde zwei Thruway-Kunden testen. – Kolyunya