Push beskeder med jQuery/javascript

Tags:    javascript

Hej udviklere,

Jeg sidder i gang med at større projekt hvor vi har overvejet om det er muligt at lave push beskeder med javascipt?

altså således at det ikke er en automatisk timeout der skal lave kald til en php fil hver 5. sekund, men i stedet automatisk pushe beskeder fra php til klienten?

Ved ikke om jeg har fået formuleret mit spørgsmål ordentligt.

På forhånd tak ;-)



2 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Det kan du ikke på den måde.

Det du kan lave er at lave det der hedder Long Polling. Det vil sige at du har et PHP-script på serveren der har sat max_execution_time til 0 - det vil sige den kører indtil noget stopper den, den kan ikke time ud.

Derefter laver du noget ala:
Fold kodeboks ind/udKode 

og så outputter du beskeden når din løkke er færdig.

med AJAX laver du så et request til dette script, og sætter den til, som callback, at lave et nyt request til samme script så snart den får et svar.

Der sker så følgende:

1: Klienten requester besked.php
2: Besked.php venter med den åbne forbindelse indtil der er kommet en besked.
3: Klienten modtager beskeden via den åbne forbindelse, og lukker den
4: Klienten åbner med det samme en ny forbindelse, GOTO 1.

Det er så tæt du kommer på PHP-baseret push. Det fungerer fint, men kan godt blive sløvt hvis du har mange simultane klienter.

Hvis du ikke er tvunget til at bruge PHP udelukkende, men kan installere ting på serveren, vil jeg snarere anbefale dig at kigge på en såkaldt comet-server, som er noget server-software der laver rigtig Ajax-push. APE har jeg hørt meget godt om. http://www.ape-project.org/



Indlæg senest redigeret d. 29.09.2010 11:39 af Bruger #8223
Du kan gøre det med long pulling.
Men hvis du vil være lidt mere med på det "hippe" og nye kan du også begynde at læse omkring WebSockets det er netop dette problem med Request-Response setup.

WebSockets er dog rimeligt og selvom de fleste browsere ikke understøtter det kan endnu findes der nogle API'er/Plugins som har et godt fallback system som sikre næsten alle browsere kan bruge det.



t