Avatar billede hagger Nybegynder
13. februar 2011 - 01:06 Der er 7 kommentarer

Socket programmering i PHP

Hej

Jeg er igang med at lave en chat, men har fundet ud af at ajax-kald der hele tiden tjekker i databasen for nye brugere, beskeder osv, er for belastende og for langsomt. Derfor vil jeg gerne starte med at bruge en socket server istedet. Jeg ved ikke ret meget om socket server programmering, men jeg ved at det kan lade sig gøre i PHP. Hvad skal man bruge for at komme igang med at lave en socket server? Jeg ved det er noget med en IP og en port, men en IP til hvad? og hvor skal denne socket server ligge henne? I ens FTP? Er det overhovedet muligt at lave en socketserver der kan håndtere flere tusinde brugere samtidigt?

Håber at i kan hjælpe mig på rette vej :-)

Mvh Hagger
Avatar billede moddi100 Seniormester
13. februar 2011 - 01:15 #1
Avatar billede hagger Nybegynder
13. februar 2011 - 01:17 #2
Jeg har også set de sites der, men jeg kan stadig ikke fatte hvad det IP er til og hvor man skal placere socket-serveren
Avatar billede HBP2 Praktikant
13. februar 2011 - 09:44 #3
En "socket-server" er blot et program som står og lytter på en bestemt IP adresse og port og får besked når andre programmer (på andre computere) laver en forbindelse til IP adressen/porten. Derefter kan de to programmer sende data til hinanden.

IP adressen (eller blot "IPen") er som regel blot adressen på den computere hvorpå socket-serveren kører - f.eks. 192.168.1.5 hvis du kun skal bruge det på dit lokale netværk. Eller din globale IP adresse, som du får fra din ISP.

Det skulle nok kunne lade sig gøre at lave en socket-server til 1000 brugere i PHP når der bare er tale om chat, altså typisk bare 50-100 bytes fra hver bruger ca. hvert 5. sekund.

Programmet skal ikke "placeres" noget specielt sted - det skal startes ligesom web-serveren på din PC.
Avatar billede hagger Nybegynder
13. februar 2011 - 17:57 #4
Tak for svar HBP2.

"IP adressen (eller blot "IPen") er som regel blot adressen på den computere hvorpå socket-serveren kører"

Hvordan sætter man så en socket server op til at køre på sin computer?
Avatar billede HBP2 Praktikant
13. februar 2011 - 18:13 #5
Nu skriver du jo ikke noget om hvilket OS du bruger - hvis det er Linux skal du starte programmet fra /etc/init.d/ eller lign.
Jeg er dog ikke sikker på at PHP er det bedste sprog til det formål, men det er i høj grad et spørgsmål om smag.
Avatar billede tjens Nybegynder
13. februar 2011 - 21:08 #6
Det hjælper nok ikke mærkbart, at du udskifter Apache med hjemmelavet socket server, hvis din PHP stadig "hele tiden tjekker i databasen for nye brugere, beskeder osv".

Måske kunne du omstrukturere din chat, så disse tunge opslag ikke var nødvendige:


Dine chatOpdateringsAjaxKald kunne f.eks. kalde en html (eller xml eller JSON) side pr. chatrum, som kun indeholder de sidste 10 sekunders chat.

Denne lille html-side overskriver du så med PHP, men kun hver gang der skrives et nyt indlæg.

Dermed skal PHP ikke køre så tit, og når den kører lave mindre.

Så er det javascript på brugerens maskine, det checker det modtagene, og ser om brugerens skærm skal opdateres med en eller flere nye linier.
Avatar billede HBP2 Praktikant
13. februar 2011 - 22:42 #7
Behovet for hele tiden at tjekke databasen skyldes jo at en HTML forbindelse er "state-less" - hver gang en bruger skal have en opdatering så starter Apache fra bunden, så at sige.

Et separat program kan huske tilstanden for hver bruger, så det er kun når der er en ændring i et-eller-andet at man behøver at skrive til databasen (eller læse fra databasen).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester