iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   ASIHTTPRequest (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/99258-asihttprequest.html)

hallo409 19-09-11 00:42

ASIHTTPRequest
 
Hallo,
Ik heb een vraagje omtrent de werking van ASIHTTPRequest. Ik heb op dit moment een project lopen waarbij gegevens moeten worden gepushed naar een Iphone. Nu is dit blijkbaar nogal een erg lastige klus en ben daarom op een alternatieve manier te werk gegaan. Een iPhone stuurt een request naar een php pagina die php pagina gaat zoeken of er iets is gewijzigd zo ja dan geeft hij dit terug. Die php pagina blijft 1 minuut lang zoeken en anders geeft hij terug niets gevonden. Dan start de request op nieuw. Op deze manier heb ik een soort van Push en hoef maar eens per minuut de php pagina te pullen.

Nu komt de vraag, tijdens zo'n request bijft de activity indicator in de balk lopen. Hoe werkt dit systeem? Vraagt hij een website op en wacht tot er response komt of blijft hij constant maar vragen? aangezien de activity indicator maar blijft draaien (gedurende die hele minuut).

Dit zou namelijk een flinke aanslag op je internet verbinding zijn haha.

Alvast erg bedankt!
:d

Hollance 19-09-11 01:29

ASIHTTPRequest houdt per default de verbinding met de server een tijdje open (een paar minuten), zodat hij bij een volgende aanvraag niet opnieuw een verbinding hoeft op te zetten. Dit heet een persistent connection. (Het kan zijn dat dit in de laatste versie standaard uit is gezet, maar je kunt het sowieso altijd weer enablen.)

In principe kost het (bijna) geen bandbreedte om een verbinding een minuut lang open te houden zonder dat er gegevens heen en weer worden gestuurd. Alleen als er daadwerkelijk pakketjes met data op en neer gaan, wordt er bandbreedte gebruikt.

Dat wil niet zeggen dat jouw oplossing ook echt goed is. Je misbruikt het HTTP protocol voor iets waar het eigenlijk niet voor gemaakt is. Het is slimmer om zelf een eigen protocol te maken (klinkt enger dan het is) met sockets. De iPhone houdt dan een verbinding open naar de server (wat dus nauwelijks bandbreedte kost). Steeds als de server iets te melden heeft, dan stuurt hij de gegevens naar de iPhone.

Je kunt dit niet in PHP doen (het kan wel maar ik zou het niet doen), maar bijvoorbeeld in Java of Python. Je kunt hier een tutorial vinden over dit onderwerp:
How To Create A Socket Based iPhone App and Server | Ray Wenderlich

hallo409 19-09-11 12:46

Oke ontzettend bedankt voor uw hulp :-) ik denk echter dat het gedeelte met sockets op dit moment nog wat te hoog gegrepen is aangezien ik nog nooit iets eerder met een socket verbinding heb gedaan (ken alleen de term). Ik weet dat ik in dit geval de http misbruik maar het werkt wel en dat is voor mijn demonstratie applicatie voorlopig voldoende.

Whacko 19-09-11 13:27

Ik vind het niet eens zo'n hele slechte oplossing. Echter zou ik het php script niet een minuut laten wachten.

Je iPhone roept gewoon elke minuut het script aan. in de response staat de tijd wanneer er het laatst iets is gewijzigd. Als deze datum nieuwer is dan de laatste data die jij hebt, dan lees je de rest van de data in.

Dit is niet echt push, maar eerder Polling. Als je echt realtime iets wilt pushen dan moet je inderdaad met sockets gaan werken.

hallo409 19-09-11 13:30

Ja dan ben je dus om de minuut aan het pollen. De manier waarop ik nu werk is dat de PHP om de minuut terug geeft "Ik heb niks". Gebeurd er echter tussentijds iets dan geeft hij het direct terug in dat geval heb ik dus een response van 1 seconden vanaf het moment dat php een verandering detecteerd. en zit er niet steeds één volle minuut tussen

Whacko 19-09-11 15:04

Ja dat klopt. Ik weet natuurlijk niet hoe belangrijk het is dat je de data zo snel mogelijk hebt :)

hallo409 19-09-11 15:05

Dat is best belangrijk. Maar dit is alleen tijdens het gebruik van de app het hoeft niet te werken in de background. Dus ik verwacht dat deze oplossing die overigens werkt :) geen probleem is

Hollance 19-09-11 19:17

Citaat:

Oorspronkelijk geplaatst door hallo409 (Bericht 706958)
Dus ik verwacht dat deze oplossing die overigens werkt :) geen probleem is

Op de iPhone werkt het waarschijnlijk prima. Maar wat denk je dat er aan de kant van de server gebeurt? Die moet voor elke iPhone die de app gebruikt een actieve HTTP connectie onderhouden. Als de app populair wordt, kun je maar beter een grote server aanschaffen. ;-)


Alle tijden zijn GMT +2. Het is nu 01:02.