Der Publish-Callback in der PubNub-API wird mit einer Nachricht wie folgt zurückgegeben -
%Vor%Aber das gibt keinen Hinweis darauf, für welche Nachricht dieser Callback ist. Im Falle eines Veröffentlichungsfehlers ist der erste Wert im Rückgabearray 0. Wie finden Sie jedoch heraus, welche Nachricht erneut veröffentlicht werden soll?
Der Publisher kann Nachrichten mit hoher Geschwindigkeit veröffentlichen und nicht auf den Rückruf warten, bevor er eine weitere Nachricht veröffentlicht. Wenn der Rückruf aufgerufen wird, hat der Herausgeber möglicherweise bereits 10 weitere Nachrichten veröffentlicht.
Die PubNub-REST-API stellt auch das JSONP-Format bereit. Sie können eine Zuordnung von "Callback-Funktionen" zu tatsächlichen Nachrichten erstellen, und wenn die Verarbeitung abgeschlossen ist, können Sie eine Referenz auf die ursprüngliche Nachricht erhalten, indem Sie die "Rückruffunktion" aus der Antwort verwenden.
Zum Beispiel:
Wie Sie sehen, gibt es m_2c453
in URI, es wird vom Server als Antwort verwendet:
Und hier wissen wir, dass m_2c453
verwendet wurde, um "Hello world"
message zu senden.
Aber ich denke, das plattformabhängige PubNub SDK sollte das alles für Sie erledigen.
Übertragen hier, da es für eine Nachrichtenantwort zu lang ist.
Als Antwort mit @Geremy, wenn die Nachricht 1,2,3,4,5 gesendet wird, erhalte ich einen Veröffentlichungs-Callback in 1,2,3,4,5-Reihenfolge? Es wird keinen Fall geben, bei dem eine Antwort in 2 und 4 fehlschlägt? In diesem Fall, wenn wir mit der Vorstellung fortfahren, dass wir eine geordnete Antwort erhalten, würde dies bedeuten, dass eine Antwort für die Nachrichten 4 und 5 statt für 2 und 4 eintrifft. Kann ich dem pubnub-Team vorschlagen, dass sie eine hinzufügen vierte Daten in der JSONArray sie zurückgeben, würde es das ID-Feld in der Nachricht, die veröffentlicht wurde enthalten (wenn es solche Daten zB {"id": 123, Nachricht: "Hallo"}), wenn es keine gibt, offensichtlich die Die zurückgegebene ID wäre eine leere oder leere Zeichenfolge.
Ich stand vor einer ähnlichen Herausforderung. Ich wollte Nachrichten in die Warteschlange stellen, während das Gerät offline ist, und sie dann bei der Wiederverbindung senden. Im Callback musste ich wissen, welche Nachricht gesendet wurde, um sie aus der Warteschlange zu entfernen. Ich habe diese Lösung gefunden:
%Vor% Der Trick besteht darin, this
in der Callback-Funktion an das Nachrichtenobjekt zu binden. Es scheint zu funktionieren. Ich denke, man könnte auch nur die Variable i
binden, die einen direkten Zeiger auf die Nachricht in der Warteschlange geben würde.
Ich wurde von dieser Antwort in einer anderen Frage inspiriert: Ссылка