Passende Programmiersprache für Client/Server Applikation gesucht

Fatal Error

Lt. Junior Grade
Registriert
Jan. 2009
Beiträge
294
Hallo!

Wie der Titel schon sagt bin ich (und mein Projektteam) auf der Suche nach der richtigen/passenden Programmiersprache für ein Projekt. Es geht hierbei um eine Client/Server Applikation die am Client mit Flex und AIR gelöst wird.

Wir wollen den Zugriff auf File-Server vereinfachen bzw. verbessern. Das Programm am Client soll Ordnerstrukturen und Dateien, eben alles was am File-Server vorhanden ist, darstellen.
Nun ist die Frage welche Sprache wir am Server verwenden sollen?
PHP oder sonstiges fällt weg, wir wollen keine AJAX-ähnliche Applikation die andauernd Requests schickt.

Ein Flash Media Server wäre interessant, allerdings müsste sich der Kunde dann auch dieses Produkt kaufen. Der Vorteil wäre hier aber das Verschlüsselte RTMPS Protokoll.

C++ wäre nett, generell ist zu sagen dass das Programm am Server als Dienst/Deamon laufen soll. Wir wollen es aber so plattformunabhängig wie möglich halten, deswegen ist hier die Frage wie viel Aufwand das darstellen würde.

Serverseitiges Java/Java Enterprise ist uns auch in den Sinn gekommen, ist allerdings langsamer als C++...

.NET irgendwas, wir wollen uns nicht auf Microsoft-Server festlegen, deswegen scheidet das aus.

Es gibt sicher noch viele andere Sprachen die ich hier nicht erwäht habe, es war nur eine Anregung.
Welche Programmiersprache würdet ihr einsetzen?
Danke schonmal für eure Antworten!

PS: Ich hoffe dass ich das Problem ausreichend geschildert habe, wenn noch etwas unklar ist einfach fragen!
 
C++ mit einem Framework wie wxWidgets
...und schon kannst Du mit wenig Aufwand Deine Serveranwendung auf Nicht-Windows-Plattformen portieren.

Zusätzlich existieren wohl die meisten Libs und Bindings für diese Programmiersprache.


Btw: .NET Applikationen laufen mit Hilfe von Mono beispielsweise auch auf Linux. Ich rate dennoch davon ab, da eine VM/RE auch immer Mehraufwand bei Installation und Wartung bedeutet.
 
Schade, WCF mit C# wäre das einfachste für stabilen Betrieb gewesen.
Damits schön schnell geht muss eben C++ herhalten.
 
Also schon 2 die mir zu C++ raten.
wegen wxWidgets, am Server brauche ich nicht umbedingt irgendeine grafische Oberfläche wenn ich ehrlich bin, es würden auch Konfigurationsdateien reichen.

Aber hier stößt mir die nächste Frage auf: Ist es leicht mit C++ auf die Berechtigungen usw. eines Ordners zuzugreifen?
 
Ja klar, machst nen filestream (ofstream oder so?) und arbeitest mit dieser Referenz. Unter Linux bearbeitest du quasi den Inode-Eintrag, um Berechtigungen etc. zu setzen.
Aber wieso benutzt du nicht einfach einen bereits vorhandenen FTP-Server/Client?
 
Ok das ist gut, hab mich nur bis jetzt noch nicht so viel mit c++ auseinandergesetzt.

zu deiner Frage:
Ich bin grad in der vorletzten Klasse der HTL (in Österreich) und dieses Programm soll unsere Diplomarbeit werden.
Das Neuartige dabei ist die Darstellung von Dateien und Verzeichnissen, anstatt den herkömmlichen Dingen wie Trees, Kacheln, Grids und was wir noch alles aus der Windows-Welt (-.-) kennen wollen wir auf neue Konzepte setzen, wie zum Beispiel einer Mindmap-Ansicht.
Weiters kommen noch mehr Funktionen für innerbetriebliche Kommunikation dazu...
hoffe du kannst dir jetzt etwas darunter vorstellen^^

danke übrigens für die schnellen Antworten
 
Serverseitiges Java/Java Enterprise ist uns auch in den Sinn gekommen, ist allerdings langsamer als C++...
Das halte ich für ein Gerücht :)

Und wenn dem so sein sollte, so bietet es zumindest sicherheits-technisch gewaltige Vorteiel gegenüber C++.
 
Da Adobe selbst Java für ihren LiveCycle Service einsetzt würde ich euch auch ganz klar Java empfehlen. Das ist eigentlich Best Practice im Zusammenhang mit Flex. Und dass (serverseitiges) Java angeblich langsam sei ist eine Mär, die man in einem Hochschulstudium eigentlich ausgetrieben bekommen sollte.
 
Fatal Error schrieb:
Ist es leicht mit C++ auf die Berechtigungen usw. eines Ordners zuzugreifen?

Jein.

Wenn du plattformunabhängig programmieren willst, kannst du auch Qt benutzen. Dabei kannst du die GUI-Sachen ruhig weglassen und nur Qt-Core benutzen. Da gibt es u.A. Framework-Klassen für Netzwerk-Kommunikation, Threading und Filezugriff inklusive Rechten. Speziell deine Rechte-Frage ließe sich dann mit QFile beantworten.
Mit Boost ließe sich das sicherlich auch noch lösen. Da sollte AFAIK auch alles drin sein, was du willst.

Die Dienst-Problematik lässt sich nur mit extra Anpassungen pro Plattform lösen. Für Windows wirst du die SCM-Schnittstelle implementieren müssen (dafür gibt's mit Sicherheit fertiges Zeug), unter Linux/Unix musst du das Daemon-typische Startprozedere (stdin/stdout schließen, CurrentDir auf /, von der Session des Startprozesses loslösen damit der Init-Prozess der Parent wird) vollziehen und Signal-Handler einrichten. Für die Signale des OS musst du dann auch noch einheitliche Schnittstellen für beide Plattformen bereitstellen, die der Dienst-Code dann ansteuern kann.
Dann kannst du einen gemeinsamen Einstiegspunkt für beide Plattformen aufrufen.

Das ist nur Info und keine generelle Empfehlung für C++. :)
 
Zuletzt bearbeitet:
wxWidgets ist nicht mit "GUI" gleichzusetzen. Sicher wird dadurch die GUI-Programmierung einfacher, primär besteht wxWidgets aus vorgefertigten Routinen und Klassen, die plattformunabhängiges Entwickeln ermöglichen. So wird Deine Software letztlich portierbar.
 
Ok, ich tendiere nun eher zu C++ mit QT, was mich noch davon abhält ist, dass ich es nicht zusammen gebracht hab qt mit eclipse auf meinem mac zum laufen zu bringen ._. für linux und windows gibts eclipse plugins, aber für mac hab ich nichts dergleichen gefunden.

aber ich würd auch noch gern mehr über java enterprise hörn. ich programmiere schon seit 10 jahren java se, deswegen wär das eig super.
aber ich brauch für java enterprise doch auch wieder nen server wie tomcat oder?
wobei eigentlich muss es ja gehn java programme einfach laufen zu lassen, tomcat is doch nur für java server pages und sowas oder?
 
Zuletzt bearbeitet:
Fatal Error schrieb:
aber ich würd auch noch gern mehr über java enterprise hörn. ich programmiere schon seit 10 jahren java se, deswegen wär das eig super.
aber ich brauch für java enterprise doch auch wieder nen server wie tomcat oder?
wobei eigentlich muss es ja gehn java programme einfach laufen zu lassen, tomcat is doch nur für java server pages und sowas oder?
Natürlich kannst du Java auch so laufen lassen, Java ist eine stinknormale Programmiersprache, damit kannst du fast alles machen was du willst.

Ich würde dir mal raten, dich mal etwas intensiver mit der Thematik auseinanderzusetzen. Also selbst mal googeln und notfalls Wikipedia zu lesen, statt dir alles vorkauen zu lassen.
 
Tomcat brauchst du für Servlets, JSP und dergleichen. Das ist auch der einfachste Weg, den Server einfach als Servlet laufen zu lassen. Eventuell mit dem JWSDP oder Axis als Webservice. Ein J2EE Application Service wie JBoss wäre glaub ich eine Nummer zu groß für euch.
Aber den Server als normale Java-Anwendung zu implementieren ist grober Unfug.
 
Üblicherweise ist das bei einem Server das aber ganz bestimmt nicht der Fall. :D Da gibt es ganz andere Bottlenecks wie Datenbank, Netzwerk, Datenaufkommen etc.

Java/J2EE ist die Technologie für Serverarchitekturen. C++ ist da eher sehr exotisch.
 
Zuletzt bearbeitet:
ok ich stand da etwas auf dem schlauch.

hab jetzt ein bisschen mit java probiert, funktioniert auch toll und ich kann daten hin und her schicken über die sockets und mehrere threads funktioniern auch super.

nur jetzt ist die frage wie ich meine daten versende. mir wurde gesagt ich soll eher ein exisitierendes protokoll verwenden und kein neues programmiern...
üblicherweise schicke ich xml dateien und vielleicht kleine andere anweisungen in form von einer zeile...was würde sich hier anbieten?

(hoffentlich ist es nicht so dass ich für jede fragen einen neuen thread aufmachen muss, sollte es so sein dann entschuldigt das bitte)
 
Das hängt von den zu übertragenden Daten ab. In Java kannst du das XML Objekt serialisieren und an die Netzwerktransportschicht übergeben. Ich nehme an du verwendest TCP.

Ein einfaches Anwendungsprotokoll erleichtert die Kommunikation. Unter TCP musst du die empfangenen Daten, die in Bytes übertragen werden, wieder richtig zusammensetzen und interpretieren. Dafür gibt es zwei Möglichkeiten, per Delimiter oder einer expliziten Länge. Siehe http://www.codeplanet.eu/tutorials/java/57-battleship.html?start=4.

Ich würde dir dazu raten entweder die dort geschilderte Netzwerkbibliothek zu verwenden oder selbst eine Klasse Message zu schreiben, die ein Encoder und Decoder entsprechend nutzt. Klassische Beispiele sehen so aus, wobei die konkrete Klasse ItemQuoteDecoderX das Interface implementiert.

PHP:
public interface ItemQuoteDecoder
{
    ItemQuote decode(Stream source);
    ItemQuote decode(byte[] packet);
}

PHP:
public interface ItemQuoteEncoder
{
    byte[] encode(ItemQuote item);
}

Der Netzwerkstream wird von einer Framerklasse entsprechend des Delimiters in Objekte vom Typ ItemQuote zerlegt, der dann zurück in das Objekt geparsed werden kann.

Flexibler ist die Lösung über die explizite Länge. Dieser Ansatz wird auch von der auf der oben verlinkten Seite genannten Netzwerkbibliothek verwendet. Dort lassen sich beleibig Nachrichten variabler Länge versenden und werden automatisch an die Handler weitergereicht. So ist es spielend einfach möglich in wenigen Sekunden ein eigenes Anwendungsprotokoll zu definieren. Man muss sich nicht um die Details kümmern, sondern nur die Nachrichtentypen definieren, die man braucht. Alles weitere erledigt die Bibliothek.
 
Zuletzt bearbeitet:
Wie gesagt, übertrag die Daten über SOAP bzw. Webservices oder nimm JMS her (z.B. ActiveMQ). Sich etwas selber zu stricken ist völliger Humbug.
 
Zurück
Oben