Avatar billede stringbuffer Nybegynder
06. april 2002 - 10:53 Der er 26 kommentarer og
1 løsning

Chatserver - hvordan?

Hvilken servermodel skal man vælge til en chatserver, der skal have rigtig mange klienter forbundet?

Jeg søger lidt at få gang i en diskussion, fordi jeg dels er i gang med at lave en, og dels kan se at det er et *HOT* emne her på eksperten...


Der bliver først tildelt point efter noget tid, hvor der er en del svar/kommentarer, jeg kan forholde mig til ;)
Avatar billede stefan_jensen Nybegynder
06. april 2002 - 11:12 #1
er det asp eller hvad?
Avatar billede soreno Praktikant
06. april 2002 - 11:31 #2
nok næppe asp i c++ kategorien ;)
Avatar billede stringbuffer Nybegynder
06. april 2002 - 11:32 #3
Kan du læse? Kategorien hedder C/C++
:-Þ
Avatar billede brilleaben Nybegynder
06. april 2002 - 12:10 #4
Hvis du ikke bruger threads er en pre-forking model ala apache nok den der gi'r bedst performance.
Avatar billede stringbuffer Nybegynder
06. april 2002 - 12:19 #5
Mener du lave en pøl med tråde og så tildele en tråd pr. client når en client connecter?
Avatar billede brilleaben Nybegynder
06. april 2002 - 13:09 #6
yep.  Og lidt smart management af pølen så'en at nye klienter ikke venter (der altid er en ledig tråd)
Avatar billede stringbuffer Nybegynder
06. april 2002 - 13:19 #7
Det tror jeg ikke vil være tilstrækkeligt...
Jeg mener at en proces kan max have 1024 tråde (i hvert fald på min maskine).
Og jeg vil gerne kunne have flere online.
Avatar billede stringbuffer Nybegynder
06. april 2002 - 13:27 #8
Jeg har flg. idé:

1) En tråd med accept af logins
2) En tråd med behandling af data fra login-sockets
3) En tråd til client-connects
4) En tråd til behandling af authentication fra clients
5) En tråd til behandling af hvad der kommer ud af klienternes sockets
6) En tråd til at sende nye beskeder ud til alle klienter

7) Et main program (på under 20 linier)

Idéen kommer af at jeg vil ikke have at noget, der tager lang tid, blokerer for noget, der tager kort tid. Så jeg vil have det sådan at de requests/events, der behandles inden for hver tråd, tager lige lang tid t behandle (sådan cirka...)

Jeg har fået kodet noget, der virker, men jeg har ingen måde at kunne teste eller forudse hvordan det virker med MANGE logins.

Kan nogen se en bommert i den metode?
Avatar billede soreno Praktikant
06. april 2002 - 14:27 #9
hvis en proces max kan have 1024 tråde, så starter du da bare flere processer op og laver noget ipc mellem dem (er det ikke sådan apache gør, altså starter flere processer op ?)
Avatar billede jpk Nybegynder
06. april 2002 - 14:45 #10
Her er et eksempel på en simpel chat-server/client, dog til VC++
http://codeguru.earthweb.com/network/ChatSource.shtml
Avatar billede stringbuffer Nybegynder
06. april 2002 - 14:46 #11
Når du siger noget ipc så er det vel interproces kommunikation... og den eneste måde, jeg kan se at sådan noget kan laves effektivt, er ved delt hukommelse. Og delt hukommelse er ikke ligefrem nem at arbejde med mht. at lave datastrukturer med dynamisk allokering.
Avatar billede stringbuffer Nybegynder
06. april 2002 - 14:51 #12
Arghhh... bliver dårlig når jeg skal læse VC kode...
Jeg holder mig til UNIX socket programmering (det kan faktisk fås til at virke under winsock med mindre tilrettelser)
men tak for linket :)
Avatar billede stringbuffer Nybegynder
06. april 2002 - 14:54 #13
. o O ( Er der egentlig en grund til at kode servere til windaz når linux og FreeBSD kan fås gratis og rykker lidt mere til programmering...?)
Avatar billede soreno Praktikant
06. april 2002 - 14:56 #14
nu er du vist på vej ud i en religionskrig... :=)
Avatar billede stringbuffer Nybegynder
06. april 2002 - 15:59 #15
ja, og min tro er bedre end din *GGG* ...tror jeg nok
Avatar billede jackonlinux Nybegynder
07. april 2002 - 18:33 #16
THE POWER OF UNIX !!!
Ja jo.... jeg ville nok lave din server på en UNIX
platform og en winsock baseret client...

Sockets skulle jo gerne være standardiseret :-)

Jeg har hørt den dér med at MS påstår at tråde i en proces skulle give ekstra ydelse i håndteringen, men dette kan ikke rigtig ses i praksis når man sammenligner... men igen -er det et spørgsmål om religion.

Dog mener jeg kun at UNIX er en religion -og Win32 mere et hype / forretnings -logik

Vi kan sikkert blive enige om at Windows tit er i erhverslivets øjne en nemmere og billigere løsning...
Avatar billede stringbuffer Nybegynder
07. april 2002 - 19:00 #17
Det med tråde har jeg læst hos MhygroZopht® at det i bund og grund skulle gøre at de hurtige ikke skulle vente på de langsomme, og det kan da være ret vigtigt ved feks. webservere, der skal sende lange filer til klienter med langsom forbindelse. Men generelt burde en chatline (også en kommando) tage meget kort tid at behandle så der vil jo ikke være hurtigere og langsommere klienter her... Især hvis man sætter en begrænsning på f.eks. 256 tegn pr. linie.

Jeg har implementeret min underlige combo med 7 tråde og en helvedes masse låse *GG*
Jeg lavede 25 klienter (browserbaserede DHTML+Java) og satte dem til at sende en pæn lang linie hvert sekund. Kunne desvære ikke lave flere klienter fordi min (Windaz) maskine ikke kan klare mere uden at maskinen bliver sinke... Anyway, belastningen af serveren (RedHat Linux 7.2) var den samme som når den kører idle.
Avatar billede stringbuffer Nybegynder
07. april 2002 - 19:02 #18
der skulle nok have stået klient-processer... det er jo samme klient, der kørte i alle 25 vinduer
Avatar billede soreno Praktikant
07. april 2002 - 21:54 #19
lav en kommandolinie klient, der laver x antal tråde, som indeholder samme logik som browser appletten. Du behøver jo ikke se outputtet (lade bits'ene skylle ud i det virtuelle lokum :-), men bare lade alle tråde spytte "Hello World !!" hen til serveren... ?
For at gøre det sjovere, så kan du jo også starte flere jvm's med kommandoline klienten op og så få stresstestet din server.
Avatar billede stringbuffer Nybegynder
08. april 2002 - 00:26 #20
Godt forslag, det vil jeg prøve :-)
Avatar billede stefan_jensen Nybegynder
09. april 2002 - 16:15 #21
SORENO -- jeg mente om hun/han skulle bruge asp til selve chatten...
(MAN KAN JO OGSÅ BRUGE PHP)
Avatar billede soreno Praktikant
09. april 2002 - 16:42 #22
altså klienten, ok.
Avatar billede stringbuffer Nybegynder
29. august 2002 - 23:44 #23
Uha, havde helt glemt dette her spørgsmål.... anyway, fik lavet en kommandolinie-klient som soreno foreslog og det så ud til at virke tilforladeligt - kunne logge 2000 på som hver skrev noget hver 3-5 sekunder og kunne stadig chatte via min browserbaserede klient med lag < 5 sekunder
Avatar billede stringbuffer Nybegynder
29. august 2002 - 23:44 #24
Tak fordi I prøvede at hjælpe. Jeg lukker.
Avatar billede nomak Nybegynder
10. marts 2003 - 14:51 #25
Er det muligt jeg kan få den server+client at kigge på? det er begyndt at interessere mig lidt :)

nomak@lamerz.dk

:)
Avatar billede stringbuffer Nybegynder
10. marts 2003 - 15:57 #26
Heh, serveren er ikke ligefrem open source, og den er nok oz rimeligt buggy.

Clienten er derimod Java+DHTML og indlæses når du logger på www.zhat.dk
Du er velkommen til at decompile Java-appleten.
Avatar billede nomak Nybegynder
10. marts 2003 - 22:07 #27
Det er nu heller ikke for at bruge den, men for at se hvordan sådan noget laves.. bugs gør ikke noget, det kan jo rettes - det er det sjove :)

Håber du er blød om hjertet idag *G* (eller i morn :P)
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
Kurser inden for grundlæggende programmering

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