Avatar billede brevkasserne Nybegynder
20. juli 2003 - 22:17 Der er 43 kommentarer og
1 løsning

Open Source Chat med en slags server-push-teknologi!

Er der nogen der kender en simpel chat med mulighed for offentlig og privat chat, samt en slags server-push-teknologi?
Da server-push ikke er muligt med ren PHP må det gerne være i form af noget JavaScript eller lign.

Jeg har prøvet at lede HotScripts.com, samt andre spm her på exp.dk, men syntes ikke rigtig jeg kan finde noget brugbart!

Hvis det desværre ikke kan lade sig gøre gratis, så vil jeg gerne have nogle rigtig gode eksempler (som er billige) som er lette at gå til, da jeg er interesseret i kun at lure fidussen af og derefter bygge en chat op selv!
Avatar billede erikjacobsen Ekspert
20. juli 2003 - 22:20 #1
Avatar billede fangel Nybegynder
20. juli 2003 - 22:20 #2
OleBole's blink fri chat er nok det tætteste på "server push" du kommer uden at skulle ændre i php og/eller apache (i hvert fald der er skrevet af en dansker - og skrevet på Exp)

prøv at finde den (søg efter "olebole blink-fri")

Morten
Avatar billede brevkasserne Nybegynder
20. juli 2003 - 22:26 #3
Jeg kan ikke finde noget med hensyn til olebole?

erikjacobsen --> den ser ud til at fungere fint... Er den gratis?
Avatar billede fangel Nybegynder
20. juli 2003 - 22:31 #4
Avatar billede brevkasserne Nybegynder
20. juli 2003 - 22:34 #5
www.bioalice.dk/chat er netop hvad jeg leder efter, nogen der kan hjælpe???
Avatar billede erikjacobsen Ekspert
20. juli 2003 - 22:44 #6
Den er hentet fra et link på hotscripts.com - jeg husker ikke længere navnet
Avatar billede brevkasserne Nybegynder
20. juli 2003 - 22:53 #7
Jeg har tjekket alle 106 chats igennem på hotscripts og ingen af dem fungerer ligeså godt som den på bioalice.dk!
Jeg har kun tjekket dem igennem som der ikke kostede penge og o. lign.
Avatar billede brevkasserne Nybegynder
20. juli 2003 - 22:53 #8
Er det muligt at få sendt koden til min e-mail?
Så ville jeg være meget taknemmelig!
Avatar billede erikjacobsen Ekspert
20. juli 2003 - 22:57 #9
Nej, jeg kan ikke bare udlevere koden.
Avatar billede brevkasserne Nybegynder
20. juli 2003 - 23:36 #10
Hvorfor ikke? Hvis du har hentet den fra hotscripts.com?
Hvor meget skal du evt. have for den? (penge?)
Avatar billede erikjacobsen Ekspert
20. juli 2003 - 23:49 #11
Og så er den også tilpasset.... Men hvorfor betale, når den
kan hentes gratis (det er jeg sikker på) på hotscripts.com - jeg
husker blot ikke navnet, men den er der garanteret.
Avatar billede brevkasserne Nybegynder
20. juli 2003 - 23:58 #12
Jeg har ledt hotscripts.com igennem, desværre uden held.
Du kan jo sagtens fjerne alle hemmelige informationer fra din chat, med hensyn til brugernavn, kode osv...

Jeg skal nok selv bygge min chat op fra grunden, bare med din som hjælp og inspiration!
Avatar billede erikjacobsen Ekspert
21. juli 2003 - 00:14 #13
Alt er muligt hvis man har tid ;) Jeg trækker mig igen
Avatar billede brevkasserne Nybegynder
21. juli 2003 - 01:48 #14
:-( Jeg er da ked af at høre at jeg ikke kan få fingre i den chat der er brugt på bioalice, når du som den første postede den i mit spm.
Men fair nok! :-(

Andre der har nogle forslag til en chat der fungerer som på bioalice.dk?

Jeg har tjekket den der ole bole, men synes ikke den fungere optimalt da den bare har en usynligt frame som opdatere hele tiden!
Avatar billede fangel Nybegynder
21. juli 2003 - 11:15 #15
bioalice kører jo også med frames ;)
Avatar billede brevkasserne Nybegynder
21. juli 2003 - 11:45 #16
Ja, med frames men ikke med meta-refresh eller lign., men med serverpush!
Avatar billede nomak Nybegynder
21. juli 2003 - 15:42 #17
Ole-bole's cat er ganske fin hvis man laver et par ændringer.. man kan stoppe den ski** kilk lyd ved at bruge PHP's flush() og sleep() funktioner..

Jeg har brugt det til min chat en årgang, før jeg hoppede over til C og java..

Der er dog et par ulemper ved REN php chats.. de æder så meget båndbredde og maskinkraft, at det næsten ikke kan betale sig at have den kørende..

Mit råd vil nok være, at du findet dig et programmeringssprog til serversiden( feks. C eller C++) og så en java client..

Det spiller 100% hos mig :)

NoMak
Avatar billede brevkasserne Nybegynder
21. juli 2003 - 21:54 #18
Har du noget jeg kan se og teste? Og evt. købe?
Avatar billede nomak Nybegynder
21. juli 2003 - 22:59 #19
den nye eller den gamle?
Avatar billede brevkasserne Nybegynder
21. juli 2003 - 23:59 #20
Det må vel næsten blive den nye!
men jeg vil da meget gerne se den gamle også. ville bare meget gerne have en chat i php, evt. sammen med et andet programmeringssprog da det er php jeg er bedst til!
Avatar billede nomak Nybegynder
22. juli 2003 - 10:09 #21
Den nye er lavet af flg.

Serversiden:
C
MySQL

Client side:
PHP
MySQL
(D)HTML
CSS
JavaScript
Java

den kan ses her: http://www.lamerz.dk
Avatar billede tipsen Nybegynder
22. juli 2003 - 10:20 #22
Kunne ikke finde en chat på lamerz...
Avatar billede nomak Nybegynder
22. juli 2003 - 10:26 #23
man skal selvfølgelig oprette bruger og logge ind...
Avatar billede tipsen Nybegynder
22. juli 2003 - 11:00 #24
ok - så er jeg bare for doven til at chatte :)
Avatar billede nomak Nybegynder
22. juli 2003 - 15:11 #25
Så kan i da prøve http://dev.lamerz.dk - rydder lidt op i koden og forbedre den..

user/pass : test/test

er du også for doven til det? :P
Avatar billede tipsen Nybegynder
22. juli 2003 - 15:56 #26
Det ser jo fint ud, når man chatter med sig selv, men hvordan fungerer det når der bliver skaleret - dvs. med 50-100 online samtidig?
Avatar billede nomak Nybegynder
22. juli 2003 - 16:04 #27
Da det er server/client teknologi jeg bemytter, kører det fint!
Der sendes jo ikke andet end små tekst-strenge frem og tilbage, og det gør jo at det ikke er så belastende som andre webchats der skal hente 5-6kb html hvert 5 sekundt..

har dog ikke prøvet at have flere end 20 på samtidigt, men der kørte det også upåklageligt.

bixer et program sammen der laver 50 bots og får den til at skrive helt vildt.. har dog ikke så meget tid til det ligenu, men det skal prøves! :)
Avatar billede tipsen Nybegynder
22. juli 2003 - 16:15 #28
Glæder mig til at høre resultatet - hvad kræver chatten egentlig af serveren for at kunne køre?
Avatar billede nomak Nybegynder
22. juli 2003 - 16:23 #29
well, med de 20 bruger på, åd den ca 4-5 kb/sec hvor mange af dem skrev noget!

den kører på en:
celeron 700mhz
196 mb sd ram

den kræver næsten kun hvad php chats kræver..

en webserver med php modul
mysql

og da den bruger select() skal den køre under *nix
compiler serverdelen med "cc -o ..."
Avatar billede nomak Nybegynder
22. juli 2003 - 17:10 #30
har lige lavet 2 bots der skriver en besked hvert 100 millisekunder

det kører ikke en skid langsommere af det :)
Avatar billede nomak Nybegynder
22. juli 2003 - 17:12 #31
og det belaster heller ikke 0.03% cpu tid :)
Avatar billede brevkasserne Nybegynder
22. juli 2003 - 17:30 #32
var det en chat jeg kunne låne :-D ???
Avatar billede nomak Nybegynder
22. juli 2003 - 17:37 #33
Den er ikke ligefrem open-source da den er hjemmebygget

det var nu mere for at du kunne se mulighederne hvis man udvider sine horisonter lidt :)

C og PHP ligner hinanden rimeligt meget, og hvis man kan PHP i søvne, er det næsten ingen sag at lære C

gik fra at kunne php og intet C og over til at kunne C rimeligt godt (med hjælp fra eksperterne ;)) på ca 1½ måned

den bedste hjælp har nu været http://www.cpluscplus.com - det er ikke kun C++ :)

den side er lige så hjælpsom som php.net for en php coder :)

Så må du jo bestemme dig for om det skal være ren php eller en slags hybrid chat :)
Avatar billede tipsen Nybegynder
22. juli 2003 - 17:44 #34
nomak: Kunne man få lov til at se din C/C++ kode - jeg har selv programmeret C/C++ nogle år, men har da absolut ingen anelse om hvordan man laver sådan noget. Jeg skal nok respektere, at det ikke er en "open-source" chat du har lavet og undlade at bruge eller videredistribuere den - jeg er bare nysgerrig og kunne tænke mig at se koden!
Avatar billede brevkasserne Nybegynder
22. juli 2003 - 17:54 #35
Er det muligt at erhverve sig chatten for penge?
Altså for et rimeligt beløb?
Hvis du er interesseret kan vi sagtens snakke videre gennem mail?
Avatar billede nomak Nybegynder
22. juli 2003 - 17:57 #36
Serverdelen i sig selv kan du jo ikke bruge til så meget.. Men kan lige lave en fil du kan kigge i, og så lige fjerne de mest følsomme ting såsom mysql passwords osv..

har brugt Beej's guide som udgangspunkt, og det virker sgu fint :)

Den chat i har set, har knap så mange funktioner som den på lamerz.dk da jeg begyndte forfra.. det meste af den er jo kodet mens jeg kunne ½ så meget som nu :P

Har også prøvet at kommentere det så godt som muligt så man kan få overblik over hvad de forskellige funktioner egentlig gør..

men hvis du vil se koden, skal jeg lige have dit icq nr.. er ikke vild med at 10000 brugere kender min kode :)
Avatar billede nomak Nybegynder
22. juli 2003 - 17:58 #37
hvad mener du så er et rimeligt beløb? er bare nysgærrig :P
Avatar billede tipsen Nybegynder
22. juli 2003 - 18:29 #38
nomak: Det jeg ønsker at se, er hvorledes kommunikationen mellem server og klient styres - det er alt.
Avatar billede nomak Nybegynder
22. juli 2003 - 18:36 #39
/* Main function START */
int main(void)
{
    fd_set read_fds; //Temp file descriptor for select()

    struct sockaddr_in myaddr; //Server address

    struct sockaddr_in remoteaddr; //Client address

    struct timeval tv;

    int listener, newfd, nbytes, addrlen, i, j, pid, yes=1;

    time_t ping;

    pid = getpid();

    if(pid)
    {
        char pidNr[8];
        FILE *pidFile;

        sprintf(pidNr, "%i", pid);

        pidFile = fopen("LamerzPID", "wt");

        if( pidFile != NULL )
        {
            fputs(pidNr, pidFile);
            fclose(pidFile);
        }

        else
        {
            printf("Error while writing PID file!\n");
            exit(1);
        }
    }

    else
    {
        printf("No PID generated!\n");
        exit(1);
    }

    FD_ZERO(&master);
    FD_ZERO(&read_fds);

    //Initialize Listener
    if( (listener = socket(AF_INET, SOCK_STREAM, 0)) == -1 )
    {
        perror("socket");
        exit(1);
    }

    //Reuse addr if used
    if( setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 )
    {
        perror("setsockopt");
        exit(1);
    }

    //Bind to address
    myaddr.sin_family = AF_INET;
    myaddr.sin_addr.s_addr = INADDR_ANY;
    myaddr.sin_port = htons(PORT);
    memset(&(myaddr.sin_zero), '\0', 8);

    if( bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1 )
    {
        perror("bind");
        exit(1);
    }

    //Listen
    if( listen(listener, 50) == -1 )
    {
        perror("listen");
        exit(1);
    }

    //Adding listener to master set
    FD_SET(listener, &master);
    fdmax = listener;

    //Initialize input
    input = (char *) malloc(700);


    //Main while loop - keeps program running
    while( 1 )
    {
        int i;

        read_fds = master;

        //Select
        tv.tv_sec = 0;
        tv.tv_usec = 50000;
        if( select(fdmax+1, &read_fds, NULL, NULL, &tv) == -1 )
        {
            perror("select");
        }

        //Check connections
        for( i=0;i<=fdmax;i++ )
        {
            //Does the connection exist?
            if( FD_ISSET(i, &read_fds) )
            {
                //Handle ned connections
                if( i == listener )
                {
                    addrlen = sizeof(remoteaddr);

                    //Accept
                    if( (newfd = accept(listener, (struct sockaddr *)&remoteaddr, &addrlen)) == -1 )
                    {
                        perror("accept");
                    }
   
                    else
                    {
                        FD_SET(newfd, &master);

                        if( newfd > fdmax )
                        {
                            fdmax = newfd;
                        }

                        strcpy(user[newfd].ip, inet_ntoa(remoteaddr.sin_addr));
                    } //End of accept

                } //End handle ned connections

                //Handle data from client
                else
                {

                    if( (nbytes = recv(i, input, sizeof(input), 0)) <= 0 )
                    {
                        if( nbytes == 0 )
                        {
                            logout(i);
                        }

                        else
                        {
                            logout(i);
                        }

                        close(i);
                        FD_CLR(i, &master);
                    }

                    else
                    {
                        input[nbytes] = '\0';

                        strcat(user[i].buffer, input);

                        if( strstr(input, "\n") )
                        {
                            handleMsg(i, nbytes);

                            memset(input, '\0', sizeof(input));

                            user[i].buffer[0] = '\0';
                        }
                    }

                } //End handle data from client

            } //End FD_ISSET()

        } //End for loop

    } //End While loop

    return 0;
}

det er main funktionen der lytter efter nye forbindelser og data fra hver client.
Avatar billede tipsen Nybegynder
22. juli 2003 - 18:43 #40
fancy...
Avatar billede brevkasserne Nybegynder
22. juli 2003 - 20:42 #41
Jeg har desværre ikke ICQ...
Men stik mig din mail, så skriver jeg!
Avatar billede nomak Nybegynder
23. juli 2003 - 00:01 #42
nomak@lamerz.dk :P
Avatar billede brevkasserne Nybegynder
02. august 2003 - 15:53 #43
nomak? Hvorfor svare du ikke på mine mails? :-(
Avatar billede brevkasserne Nybegynder
24. august 2003 - 14:49 #44
Nå, lukker spm'et!
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