Bot-Programmierung für Webserver (Buchtipps?)
-
also ich habe einen linux-server, auf dem bisher v.a. php-scripte laufen. diese scripte kommunizieren mit anderen servies über http- bzw xml-schnittstellen.
um effizienter zu werden will ich einen teil dieser php-scripte in c bzw c++ schreiben. sprich das c-programm läuft dann auf dem linux-webserver und soll http/xml anfragen verschicken bzw empfangen.
und dazu möchte ich gerne buchtipps (so speziell es eben geht). ich habe in diesem bereich wiegesagt 0 erfahrung, da ich bisher nur mit c++ für windows (mfc) geschrieben habe.
-
Nun ja, so einfach ist es nicht.
Such dir halt Bücher über Socketprogrammierung, speziell halt für Unix/Linux.
Die reine Socketprogrammierung ist nicht gerade schwer, Problem dabei ist eher die Paralellverarbeitung, sprich wenn dein Programm gerade eine Anfrage bekommen hat, darf/soll/muss es die anderen Anfragen auch annehmen und nicht blockieren.
Es gehört also schon mehr dazu als nur die reine Socketprogrammierung.
Ein spezielles Buch kann ich dir nicht empfehlen, ausser vielleicht das von Tanenbaum "Moderne Betriebssysteme".
-
okay, danke.
aber kannst du mir den ein Buch empfehlen, was mal grundsätzlich das programmieren mit c++ für linux beschreibt?
ich hab bisher ja nur win-anwendungen unter visual c++ geschrieben.
kan man mit visual c++ auch anwendungen für linux schreiben? so ein buchtipp würde mir ja auch schon helfen.
-
Visual C++ != C++
Und nein, mit VC++ kann man nicht unter Linux programmieren (es geht wohl mit dem Mono Zeugs, ist aber wenn schon dann eher für C#).
Für die reine Linux Systemprogrammierung wirst du C nehmen müssen.
Anwendungsprogrammierung funktioniert natürlich mit C++.
Ein Buchtipp hab ich dir bereits genannt. Und da das was du machen willst eigentlich Systemprogrammierung ist, wäre das auch die erste Wahl.
-
ok, jetzt bin ich noch etwas verwirrter
wo liegt für dich der unterschied zwischen anwednungs- und systemprogrammierung?
ist es generell möglich auf meinem windows-pc meinen code zu schreiben und zu kompilieren, so dass er unter linux läuft? oder muss ich gewzungenermaßen unter linux compilieren, damit er dort auch läuft?
-
Anwendungsprogramme sind halt Anwenderprogramme, wie z.B. Spiele, Office, IDE's usw.
Systemprogrammierung ist halt, nun ja, Sytemprogrammierung. Der X-Server den man bei Unix/Linux benutzt um einen GUI Desktop installieren zu können, ist z.B. reine Systemprogrammierung, da wir in der Regel davon nichts mitbekommen. Oder Treiber für GPU usw. ist Sytemprogrammierung.
Rein theoretisch könnte man den Kram unter Windows programmieren und auch kompilieren, brauchst halt die ganzen Header von Linux davon auf dem Windows System und musst diese halt der IDE bekannt machen bzw. den include Pfad angeben.
Mit dem ausführen der Programme wird es aber wahrscheinlich nix.
EDIT:
meistens sind aber eh beiden Varianten in einem Programm vereint, wie z.B. bei Online-Spielen, oder einen GUI FTP Programm (Filezilla z.B.), E-Mail Clients usw. Gibt bestimmt noch zig tausend weitere Beispiele für reine Anwender- und Sytemprogramme bzw. für Hybride davon.
-
Cybertec schrieb:
Such dir halt Bücher über Socketprogrammierung, speziell halt für Unix/Linux.
Mit Socket-Programmierung würde ich mich bei so einem Projekt aber nicht aufhalten. Was spricht dagegen eine fertige HTTP-Implementierung wie libcurl zu nehmen?
-
chess schrieb:
ist es generell möglich auf meinem windows-pc meinen code zu schreiben und zu kompilieren, so dass er unter linux läuft? oder muss ich gewzungenermaßen unter linux compilieren, damit er dort auch läuft?
Es ist generell möglich, aber nicht unbedingt besonders einfach. Im Prinzip musst du nur ein Konsolenprogramm schreiben, ohne <windows.h> oder andere betriebssystemspezifische Header oder Funktionen zu verwenden. Dann sollte es auch unter Linux laufen.
Aber die HTTP-Kommunikation sollte nun wirklich nicht das Problem darstellen, die bekommst du mit fertigen HTTP-Implementierungen nämlich geschenkt. Die größte Schwierigkeit bei diesem Projekt sollte darin liegen, die Daten des Servers zu verstehen und daraus deine Antworten zu generieren. Das läuft völlig ohne HTTP und vermutlich sogar ohne XML, denn für XML gibt es ja auch schon fertige Parser. Ich würde mich bei so einem Projekt auf keinen Fall damit rumschlagen, einen eigenen HTTP oder XML-Parser zu schreiben.
Den C++-Code, der aus gegebenen Daten des Servers eine Antwort für den Server berechnet, kannst du natürlich genauso gut unter Windows schreiben, denn der wird vermutlich sowieso nichts betriebssystemabhängiges machen, nur rechnen.
-
Naja, ich dachte er will da jetzt voll einsteigen und die Tiefen der Systemprogrammierung kennenlernen.
Aber hast recht, das ganze wäre natürlich etwas übertrieben. Rein theoretisch würde auch Boost oder gar Qt dafür reichen, da man mit beiden komfortabel sowas machen kann ohne sich um den internen Kram kümmern zu müssen.
Damit wärst du auch fast Betriebssystemunabhängig.
-
chess schrieb:
ok, jetzt bin ich noch etwas verwirrter
wo liegt für dich der unterschied zwischen anwednungs- und systemprogrammierung?
ist es generell möglich auf meinem windows-pc meinen code zu schreiben und zu kompilieren, so dass er unter linux läuft? oder muss ich gewzungenermaßen unter linux compilieren, damit er dort auch läuft?
Ich versuche mal, mit meinen Worten (und meiner Meinung) ein wenig Klarheit zu bringen.
Also rein theoretisch ist es möglich, unter Windows für Linux zu compilieren. Aber das ist kompliziert. Und zwar viel komplizierter, als ein Linux unter einer virtuellen Maschine zu installieren und dort zu compilieren.
C würde ich nicht verwenden. Höchstens für Treiber oder ähnliches - Systemprogrammierung eben. Ein Bot oder so was kannst Du in C++ schreiben. Ich würde es sogar tun, da ich C++ gut beherrsche und auch fertige Libraries für HTTP-Kommunikation habe und verwenden kann.
An Deiner stelle würde ich erst mal untersuchen, wo denn der Engpass ist. Wenn deine Perl-Lösung nicht schnell genug ist, liegt das höchstwahrscheinlich nicht an Perl. Es ist einfach viiiieeeel einfacher, das zu untersuchen, als Dich auf C++ einzulassen um dann festzustellen, dass das praktisch nicht schneller ist. In der Regel ist der Engpass bei solchen Sachen die Netzwerkkommunikation selbst. Und die wird mit C++ auch nicht viel schneller sein. Erst wenn tatsächliche die Verarbeitung der abgerufenen Seiten einen signifikanten Anteil der Verarbeitungszeit einnimmt, solltest Du Dir c++ anschauen.