HTTP Noob trifft auf komischen Webservice.
ich bastel an einer iPhone App welche mit der Smart Home Server Software auf meinem Raspberry Pi reden soll.
Das klappt für normales Pollen der Daten über NSURLSession super, der Server antwortet brav mit JSON Objekten.
Nun würde ich aber gern in verschiedenen Ansichten Live-Updates des Gerätestatus haben anstatt nur alle XX Sekunden zu pollen.
Websockets kann die Software nicht, nur Long Polling.
Allerdings scheint sich die Software beim Antworten nicht so ganz an normale Webstandards zu halten.
Die NSURLSession rennt irgendwann in den TimeOut, liefert mir aber data=nil zurück, da sie wohl immer noch auf das Ende der Antwort wartet.
Ich hab von kmr den Tip bekommen meine iPhone Verbindung durch das Debugger-Proxy Charles umzuleiten (auf dem Mac installiert).
Dort sehe ich, dass aber wirklich Daten fließen.
Immer nur ein paar Zeilen JSON für jedes Smart-Home Event, die Verbindung bleibt danach weiter offen.
Beim nächsten Event kommen dann wieder ein paar Zeilen.
Die NSURLSession rennt irgendwann in den TimeOut, liefert mir aber data=nil zurück, da sie wohl immer noch auf das Ende der Antwort wartet.
Wie kann man das alternativ angehen um die Daten häppchenweise zu empfangen direkt wenn sie ankommen (so wie ich das auch in Charles sehe)?
Zum Ablauf:
- Ich rufe eine URL mit dem Schema auf:
Das inform=type=status ist die Schnittstelle für das Abholen von auftretenden Events über Long Poll.
Schicke ich das über NSURLSession ab:
sehe ich in Charles folgende Infos:
und es kommt als response vom Smart-Home Server:
Dann ist Stille bis irgendwas im Smart-Home passiert.
In diesem Falle hab ich ein Fensterkontakt geöffnet.
In Charles ergänzt sich die Response dann um:
Das ist nun genau das was ich gern in der iOS App empfangen würde,
leider lässt sich NSURLSession nicht dazu bewegen mir diese Daten weiterzureichen.
Hab mir heute schon einen Wolf gegoogled.
Aber da das meine erste App ist bei der ich mit einem Webservice rede, bin ich schon überfragt wonach ich eigentlich so recht suchen muss...
Hilfe wird dankbar angenommen...
ich bastel an einer iPhone App welche mit der Smart Home Server Software auf meinem Raspberry Pi reden soll.
Das klappt für normales Pollen der Daten über NSURLSession super, der Server antwortet brav mit JSON Objekten.
Nun würde ich aber gern in verschiedenen Ansichten Live-Updates des Gerätestatus haben anstatt nur alle XX Sekunden zu pollen.
Websockets kann die Software nicht, nur Long Polling.
Allerdings scheint sich die Software beim Antworten nicht so ganz an normale Webstandards zu halten.
Die NSURLSession rennt irgendwann in den TimeOut, liefert mir aber data=nil zurück, da sie wohl immer noch auf das Ende der Antwort wartet.
Ich hab von kmr den Tip bekommen meine iPhone Verbindung durch das Debugger-Proxy Charles umzuleiten (auf dem Mac installiert).
Dort sehe ich, dass aber wirklich Daten fließen.
Immer nur ein paar Zeilen JSON für jedes Smart-Home Event, die Verbindung bleibt danach weiter offen.
Beim nächsten Event kommen dann wieder ein paar Zeilen.
Die NSURLSession rennt irgendwann in den TimeOut, liefert mir aber data=nil zurück, da sie wohl immer noch auf das Ende der Antwort wartet.
Wie kann man das alternativ angehen um die Daten häppchenweise zu empfangen direkt wenn sie ankommen (so wie ich das auch in Charles sehe)?
Zum Ablauf:
- Ich rufe eine URL mit dem Schema auf:
Das inform=type=status ist die Schnittstelle für das Abholen von auftretenden Events über Long Poll.
Schicke ich das über NSURLSession ab:
Status Receiving response body…
Response Code 200 OK
Protocol HTTP/1.1
SSL -
Method GET
Kept Alive Yes
Content-Type application/octet-stream; charset=UTF-8
und es kommt als response vom Smart-Home Server:
Dann ist Stille bis irgendwas im Smart-Home passiert.
In diesem Falle hab ich ein Fensterkontakt geöffnet.
In Charles ergänzt sich die Response dann um:
Das ist nun genau das was ich gern in der iOS App empfangen würde,
leider lässt sich NSURLSession nicht dazu bewegen mir diese Daten weiterzureichen.
Hab mir heute schon einen Wolf gegoogled.
Aber da das meine erste App ist bei der ich mit einem Webservice rede, bin ich schon überfragt wonach ich eigentlich so recht suchen muss...
Hilfe wird dankbar angenommen...