Was brauche ich alles / wo sollte ich einen Blick drauf werfen?

pro2

Bekanntes Mitglied
Hallo zusammen,

erst einmal: Ich weiß, dass es hier ähnliche Themen gibt, wollte aber doch noch mal was Eigenes aufmachen, da meine Anforderungen noch etwas anders sind.

Ich hatte mal wieder eine tolle Idee, was ich programmieren will, weiß aber leider gar nicht, wo ich dabei anfangen soll. Was mal rauskommen sollte: eine Art Malanwendung. Jemand malt etwas und die anderen sehen quasi in Echtzeit, was dieser jemand malt. Ich möchte das ganze über einen Server machen. Dazu hätte ich einen Linuxserver.

Ja, jetzt kommt es zur Programmierung und hier habe ich null Erfahrung. So eine schöne GUI, in der man etwas malt, das kriege ich noch hin. Aber ich habe null Erfahrung, wenn es um Netzwerkprogrammierung geht. Und dann muss ich ja auch noch die Serverseite programmieren, die dann allen Clients die Informationen weitergibt bzw. aufnimmt.

Jetzt sind meine Fragen eigentlich nur die folgenden:
Was muss ich mir dafür alles angucken? Ist das überhaupt so ohne Weiteres möglich? Gibt’s da nützliche Tutorials, die man sich angucken könnte? Wo fängt man bei der Netzwerprogrammierung am besten an?

Danke im Voraus!
 

The_S

Top Contributor
Da relativ häufig Daten ausgetauscht werden, würde ich auf jeglichen Overhead verzichten und einfach ServerSocket und Socket verwenden.
 

ARadauer

Top Contributor
weiß aber leider gar nicht, wo ich dabei anfangen soll.
habe ich null Erfahrung.
Aber ich habe null Erfahrung, wenn es um Netzwerkprogrammierung geht.
Was muss ich mir dafür alles angucken?

Also wenn du keine Erfahrung hast würde ich ganz von vorne Beginnen... am Besten arbeitest du das Buch Java von Kopf bis Fuss mal komplett durch. Dann hast du die Grundlagen und kannst dir ausgewählte Kapitel von Java ist auch eine Insel zum Thema Netzwerkprogrammierung und Swing ansehen... Wenn du denkst du hast die Grundlagen schon drauf, kannst du dir direkt mal dieses Kapitel rein ziehen Galileo Computing :: Java ist auch eine Insel – 21 Netzwerkprogrammierung

Ist das überhaupt so ohne Weiteres möglich?
Ja sollte eigentlich nicht so schwer sein.... also richtig Profi mäßig mit 100.000 Usern wirst du nicht schaffen, aber eine kleine Server App dir dir Zeichen-Komandos zwischen Clients synchronisiert... sicher auch für einen Anfänger zu schaffen...
 

The_S

Top Contributor
Dann hätte ich mal die Frage:
Wie sieht es denn aus, wenn man darauf achten muss, dass es wirklich viele User geben kann?
Worauf muss ich denn da besonders achten?
=)

Um mal ein paar Stichpunkte in den Raum zu werfen:

- User müssen trotzdem noch in vertretbarer Zeit ihre Anfragen beantwortet bekommen (Rechenkapazität)
- Anwendung muss ausreichend Speicherplatz haben, um alle Anfragen zu behandeln und ggf. Sessions zu verwalten
- Leitung muss dick genug sein
- ...

Interessante Stichpunkte zur Lösung:

- Clusterbildung
- Loadbalancer
- Caching
 

jamesv

Bekanntes Mitglied
Klingt sehr interessant, vielen Dank für die Stichpunkte :)

Das werde ich mir mal anschauen, hast du da eventuell ein paar Links dazu griffbereit?
 

The_S

Top Contributor
Google und Wikipedia ;) . Ansonsten würde ich in diesem Zusammenhang mal nach Java EE Architekturen/Servern suchen, sowas wird dann in der Regel auch nicht mehr mit Socket und ServerSocket laufen ;) .
 
T

tuxedo

Gast
Ist das für einen Netzwerk-Anfänger nicht mit Kanonen-auf-Spatzen geschossen?

Wenn er doch gar keine Ahnung von Netzwerkprogrammierung hat: Wieso soll er sich dann gleich das Thema Cluster antun?

Wieso nicht "unten" anfangen Sockets und Strings hin und her schicken. Dann ggf. mit RMI weiter machen. Der "Overhead" ist da, wenn man keine extrem verschachtelten Objekte schickt, gar nicht so groß, eher sogar vernachlässigbar.

Und die Sache mit den 1000 Clients... Nun, in keiner Anwendung ist in Version 1.0 alles erschlagen und nicht selten hat man irgendwann den Punkt erreicht wo man soviel dazu gelernt hat, dass man in Version 2.0 (oder 3.0, 4.0, 5.0, ...) große Teile neu schreibt, weil man einfach die Schwachpunkte während der Entwicklung von 1.0 erst richtig kennen gelernt hat und es nun besser weiß.

Wenn man Neuland betritt kann man nicht von vornherein alles richtig machen. Deshalb: Learning by doing...

- Alex
 

The_S

Top Contributor
Ist das für einen Netzwerk-Anfänger nicht mit Kanonen-auf-Spatzen geschossen?

Meine Empfehlung? Socket und ServerSocket? Nö, niedriger gehts ja fast gar nicht mehr :p .

Wenn er doch gar keine Ahnung von Netzwerkprogrammierung hat: Wieso soll er sich dann gleich das Thema Cluster antun?

Sollte man nicht. Hat ja auch niemand hier behauptet.

Wieso nicht "unten" anfangen Sockets und Strings hin und her schicken. Dann ggf. mit RMI weiter machen. Der "Overhead" ist da, wenn man keine extrem verschachtelten Objekte schickt, gar nicht so groß, eher sogar vernachlässigbar.

Das war doch genau meine Empfehlung.

Und die Sache mit den 1000 Clients... Nun, in keiner Anwendung ist in Version 1.0 alles erschlagen und nicht selten hat man irgendwann den Punkt erreicht wo man soviel dazu gelernt hat, dass man in Version 2.0 (oder 3.0, 4.0, 5.0, ...) große Teile neu schreibt, weil man einfach die Schwachpunkte während der Entwicklung von 1.0 erst richtig kennen gelernt hat und es nun besser weiß.

Wenn man Neuland betritt kann man nicht von vornherein alles richtig machen. Deshalb: Learning by doing...

Sehr richtig.

Ich schlage vor du liest den Thread noch einmal in Ruhe durch und achtest darauf wer was wann gepostet hat ;) .
 

homer65

Top Contributor
Du solltest auch nicht jedesmal das gesamte Bild über das Netzwerk senden.
Besser ist es nur die zugrunde liegenden "Maloperationen" zu senden.
Das dürfte den Traffic erheblich reduzieren.
 
T

tuxedo

Gast
@The_S

Ich hab den Thread gelesen. Und ich bin nach wie vor der Meinung: Stichwörter wie Clusterbildung, Loadbalancing oder JEE sind für einen Anfänger unbrauchbar und mit Kanonen auf Spatzen geschossen.

Und ja, ich hab auch schon vor meinem ersten Post zur Kenntniss genommen dass du Plain-Socket-Kommunikation angeraten hast.

@homer65

Kann ich nur Zustimmen. Das sollte man sogar mit RPC ohne große Schwierigkeiten performat genug hinbekommen.

Zum Thema "viele User": Wieviel ist "viele"? Wenn's hunderte sind. Kein Thema. ein paar hundert klappen auch mit Java IO Sockets noch gut. Wenns eher in den 4 stelligen Bereich oder darüber hinaus geht: Java NIO (xSocket, Mina, Netty, ...) oder Java AIO (erst ab Java 7)...

Gruß
Alex
 

The_S

Top Contributor
@The_S

Ich hab den Thread gelesen. Und ich bin nach wie vor der Meinung: Stichwörter wie Clusterbildung, Loadbalancing oder JEE sind für einen Anfänger unbrauchbar und mit Kanonen auf Spatzen geschossen

Woher weißt du, dass jamesv ein Anfänger ist? Ich weiß das nur von pro2 und der hat die Frage ja nicht gestellt.
 

pro2

Bekanntes Mitglied
Wusst ichs doch ;) . Wobei man natürlich auch sagen muss, dass mir pro2 ein Danke für meinen Beitrag zu JEE gegeben hat.

Ich hab erst mal ein Danke für alles gegeben, was irgendwie hilfreich war. Hab dir ja auch keins für den Beitrag oben gegeben gehabt. :)

So, das Thema ist jetzt schon etwas älter, aber in letzter Zeit hab ich endlich mal Zeit gefunden, mich ab und zu mal dranzusetzen. Hab dann auch in ein paar Büchern gelesen und geguckt, aber irgendwie sind die meisten Beispiele doch schon immer recht mager. Ich hab mir bisher dann aber doch mal alles zusammengebaut und bisher einen Chat implementiert, der auch soweit funktioniert. Es klappt auch, wenn mehrere Clients da sind usw.

Jetzt hab ich aber eine Frage zur Umsetzung: Bisher habe ich es jetzt so gemacht, dass ich erst immer per String einen Befehl gesendet habe (jeweils in Richtung Client->Server oder Server->Client), diesen ausgewertet habe und dementsprechend die nächsten Pakete behandelt habe. Ist es eine halbwegs gute Umsetzung oder sollte man das anders machen? Und wenn ja, wie am besten?
 
T

trääät

Gast
nun ... das geht dann schon eher in richtung "Protokoll" ...

ein protokoll beschreibt in der regel wie welche daten in welcher reihenfolge zu interpretieren sind ...

und in der regel sendet man ja auch erst das kommando und dann die nutzdaten ... nur ob dies jetzt in zwei getrennten nachrichten machst oder in eine packst und einen eindeutigen trenner zwischen kommando und payload nutzt ist eigentlich ziemlich egal ...
eventuell fallen hier und da ein paar ops weg oder kommen hinzu ... aber grundsätzlich ist es ein protokoll nach dem schema : kommando - payload ... die implementierung ist dir überlassen
 

Ähnliche Java Themen

Neue Themen


Oben