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?
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.
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.
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.
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).
Synes godt om
Ny brugerNybegynder
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.