Freigeisterhaus Foren-Übersicht
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   NutzungsbedingungenNutzungsbedingungen   BenutzergruppenBenutzergruppen   LinksLinks   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

C, Linux, Socket, Fork

 
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
JW1
registrierter User



Anmeldungsdatum: 13.01.2010
Beiträge: 11

Beitrag(#1662019) Verfasst am: 14.07.2011, 14:24    Titel: C, Linux, Socket, Fork Antworten mit Zitat

Schönen guten Tag,

ich möchte eine Chatsoftware schreiben (bzgl ist es kein Problem). Was mich jetzt interessiert ist eher die Tatsache, wie ich das Problem mit dem HTTP-Stream löse. HTTP ist ja bekanntlich dafür gemacht, dass es irgendwann mal aufhört zu laden.

Wie machen es andere Chat-Anbieter, dass die Seite mit den Nachrichten nicht aufhört zum Laden? (PS.: ICH WEIGER MICH IRGENDWAS MIT \*JAVA[SCRIPT]*\ ZU BENUTZEN)




mein Ansatz: C Programm mit folgenden Aufbau
Code:

* Headerzeug
* int clients[MAX_CONNECTIONS] = -1
* int n = 0;
* main
* /socket, bind, listen ... /
/Beginn: Dauerschleife

clients[n] = accept....

if (fork() == 0)
{
//HIER WIRD JEDER EINZELNE CLIENT BEHANDELT
}


if (n != -1)
{
n++ % MAX_CONNECTIONS; // Index des Socket Arrays erhöhen (aber nicht höher als MAX_CONNECTIONS)
}
/"Ende" der Dauerschleife

return 0;





Folgendes Problem gibt es: An welcher Stelle hole ich die Daten aus der Datenbank? es wäre uneffizient, wenn man die daten für jeden client extra per query aus der datenbank holt. ich brauche die Daten an der Stelle wo "//HIER WIRD JEDER EINZELNE CLIENT BEHANDELT" steht.

Meine Frage nun: Wie bekomme ich Daten vom Hauptprogramm zu den einzelnen durch Fork() erstellten Prozessen?


PS.: meine Lösung basiert auf Forks. Ich hätte auch nichts gegen eine Thread-Lösung, falls jemand so etwas besitzt

PPS.: sollte es mir gelingen, dann stell ich den quellcode online.

LG
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lukianos
Oberzyniker



Anmeldungsdatum: 28.12.2008
Beiträge: 63
Wohnort: Dresden

Beitrag(#1662115) Verfasst am: 14.07.2011, 17:44    Titel: Antworten mit Zitat

Mit Javascript könntest du dir dann mal Websocket anschauen.
Das ist erst im kommen und genau richtig dafür.

Was du suchst ist ein Mechanismus mit Listener und Observer
und so Pipapoo.

Unter POSIX gibt es die Funktion select. Ist aber nichts schwache Nerven.
Ansonsten empfehle ich immer ein gutes Buch über UNIX Systemprogrammierung.
Für einsame kalte Winternächte ideal.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Assarbad
Computerversteher



Anmeldungsdatum: 29.07.2011
Beiträge: 105
Wohnort: Reykjavík

Beitrag(#1668930) Verfasst am: 29.07.2011, 19:32    Titel: Re: C, Linux, Socket, Fork Antworten mit Zitat

JW1 hat folgendes geschrieben:
ich möchte eine Chatsoftware schreiben (bzgl ist es kein Problem). Was mich jetzt interessiert ist eher die Tatsache, wie ich das Problem mit dem HTTP-Stream löse. HTTP ist ja bekanntlich dafür gemacht, dass es irgendwann mal aufhört zu laden.

Wie machen es andere Chat-Anbieter, dass die Seite mit den Nachrichten nicht aufhört zum Laden?
Da gibt es Varianten wo der Client sozusagen gleich als Hausaufgaben mit auf den Weg bekommt, daß er sich alle paar Zeitintervalle neue Daten abholen soll. Ansonsten Stichwort: Chunked Encoding.

JW1 hat folgendes geschrieben:
mein Ansatz: C Programm mit folgenden Aufbau
Wir leben in den 201xern, C? Ich muß beruflich jede Menge C-Code pflegen und bin jedesmal froh wenn ich mal mit anderen Sprachen rummachen darf nachdem ich mit dem C rumwursteln mußte. Natürlich ist da auch ein (nicht so kleines) Problem, daß mein Chef stolz darauf ist über 20 Jahre alte Paradigmen anzuwenden und ansonsten auch sehr seltsame und überholte Ansichten bzgl. C pflegt (keine Header-Guards, keine Initialisierung bei Deklaration von Stackvariablen) ...

(er kennt meine Meinung dazu, weshalb ich keine Problem habe das hier zu schreiben zwinkern)

JW1 hat folgendes geschrieben:
Folgendes Problem gibt es: An welcher Stelle hole ich die Daten aus der Datenbank? es wäre uneffizient, wenn man die daten für jeden client extra per query aus der datenbank holt. ich brauche die Daten an der Stelle wo "//HIER WIRD JEDER EINZELNE CLIENT BEHANDELT" steht.
Du irrst, genaugenommen brauchste die Daten vor dem fork(). Warum? Weil ansonsten dein Child nicht die Daten bekommt. Sinnvolle Alternative: memory mapped files (mmap() und Freunde).

JW1 hat folgendes geschrieben:
Meine Frage nun: Wie bekomme ich Daten vom Hauptprogramm zu den einzelnen durch Fork() erstellten Prozessen?
Passiert "automagisch" bei einem kompletten Fork.


JW1 hat folgendes geschrieben:
PS.: meine Lösung basiert auf Forks. Ich hätte auch nichts gegen eine Thread-Lösung, falls jemand so etwas besitzt
Wozu? Wenn du ein "fork() light" willst, nimm halt vfork(). Schonmal mit einer der Thread-Bibliotheken gearbeitet? Zuerst die Qual der Wahl: welche genau nehmen? Und dann haben die alle kleine und feine Unterschiede. Da verlasse ich mich lieber auf fork(), auch wenn es sich dabei um eine Haßliebe handelt zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name ICQ-Nummer
nocquae
diskriminiert nazis



Anmeldungsdatum: 16.07.2003
Beiträge: 18183

Beitrag(#1668932) Verfasst am: 29.07.2011, 19:40    Titel: Antworten mit Zitat

AEW’ler … Reykjavik … du arbeitest aber nicht rein zufällig bei CCP, oder? Lachen
_________________
In Deutschland gilt derjenige, der auf den Schmutz hinweist, als viel gefährlicher, als derjenige, der den Schmutz macht.
-- Kurt Tucholsky
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer
Assarbad
Computerversteher



Anmeldungsdatum: 29.07.2011
Beiträge: 105
Wohnort: Reykjavík

Beitrag(#1668939) Verfasst am: 29.07.2011, 19:53    Titel: Antworten mit Zitat

nocquae hat folgendes geschrieben:
AEW’ler … Reykjavik … du arbeitest aber nicht rein zufällig bei CCP, oder? Lachen
Nope zwinkern

... auch wenn einige von uns dorthin gewechselt sind. Die sollen zumindest ne bessere Kantine als wir haben (mit Sternekoch, sagt man).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name ICQ-Nummer
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen   Drucker freundliche Ansicht    Freigeisterhaus Foren-Übersicht -> DAU's Paradise Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Impressum & Datenschutz


Powered by phpBB © 2001, 2005 phpBB Group