creave
2011-06-05, 20:53:50
Hallo!
Für einige von euch mag folgendes relativ trivial sein, aber wenn man wie ich wenig mit Netzwerkprogrammierung und Threading zu tun hat, dann kommt man da schon mal ins Grübeln. Die Technologie ist mir eigentlich egal, aufgrund der hohen Abstraktion und Vorwissen wäre mir jedoch Java recht.
Kurz gesagt besitzen alle Teilnehmer eines Netzwerkdienstes eine lokale Datenstruktur, sagen wir mal eine Liste. Jeder Client kann beliebig viele Einträge in seine lokale Liste schreiben. Ziel soll jedoch sein, dass die Listen untereinander synchronisiert werden und im Endeffekt jeder die gleiche lokale Liste besitzt (gleich bezüglich des Inhalts). Wenn Teilnehmer A seine Liste um den Eintrag X erweitert, so sollen via Server auch die Listen der Teilnehmer B und C um den Eintrag X erweitert werden. Optional wäre es sehr gut, wenn die Reihenfolge der Elemente innerhalb der Listen ebenfalls synchron ist.
Das ganze ist zwar nicht arg zeitkritisch, auf Polling würde ich dennoch gerne verzichten. Die "Updates" sollten schon möglichst live sein, Verzögerungen bis drei oder vier Sekunden wären ok (zu übertragende Datengröße und Netzwerkqualität mal ausgeblendet). Das spricht ja eigentlich für eine bidirektionale Kommunikation zwischen Client und Server, nur wie ist die Frage.
Sockets sind ja nie falsch, aber irgendwie aufwändig. Alles was einen Application Server braucht fällt eigentlich auch weg, da der Server in die Clients integriert sein soll und einer davon eben gleichzeitig Server und Client spielt. Dann fällt mir nur noch RMI ein, aber das ist in seiner Reinform vorerst auch nur unidirektional. Und Callbacks (die ich noch nicht ganz Begriffen habe) sind denke ich anfällig bezüglich Firewalls etc., aber zur Not wäre das ok.
Am liebsten wäre mir es, wenn so viel explizite Arbeit mit Threads wie nur möglich wegfällt. Bei RMI erstellt der Server zumindest für Clientanfragen aus anderen JVMs einen neuen Thread, das müsste man bei Sockets alles selber machen.
Wie würdet ihr das ganze lösen? Vielen Dank und schönen Abend.
edit: freue mich übrigens über Vorschläge aller Art. Also angefangen bei der Strategie bis hin zur Umsetzung. Aufgrund meiner geringen Erfahrung in dem Bereich habe ich dann später auch Detailfragen, aber alles zu seiner Zeit :)
Für einige von euch mag folgendes relativ trivial sein, aber wenn man wie ich wenig mit Netzwerkprogrammierung und Threading zu tun hat, dann kommt man da schon mal ins Grübeln. Die Technologie ist mir eigentlich egal, aufgrund der hohen Abstraktion und Vorwissen wäre mir jedoch Java recht.
Kurz gesagt besitzen alle Teilnehmer eines Netzwerkdienstes eine lokale Datenstruktur, sagen wir mal eine Liste. Jeder Client kann beliebig viele Einträge in seine lokale Liste schreiben. Ziel soll jedoch sein, dass die Listen untereinander synchronisiert werden und im Endeffekt jeder die gleiche lokale Liste besitzt (gleich bezüglich des Inhalts). Wenn Teilnehmer A seine Liste um den Eintrag X erweitert, so sollen via Server auch die Listen der Teilnehmer B und C um den Eintrag X erweitert werden. Optional wäre es sehr gut, wenn die Reihenfolge der Elemente innerhalb der Listen ebenfalls synchron ist.
Das ganze ist zwar nicht arg zeitkritisch, auf Polling würde ich dennoch gerne verzichten. Die "Updates" sollten schon möglichst live sein, Verzögerungen bis drei oder vier Sekunden wären ok (zu übertragende Datengröße und Netzwerkqualität mal ausgeblendet). Das spricht ja eigentlich für eine bidirektionale Kommunikation zwischen Client und Server, nur wie ist die Frage.
Sockets sind ja nie falsch, aber irgendwie aufwändig. Alles was einen Application Server braucht fällt eigentlich auch weg, da der Server in die Clients integriert sein soll und einer davon eben gleichzeitig Server und Client spielt. Dann fällt mir nur noch RMI ein, aber das ist in seiner Reinform vorerst auch nur unidirektional. Und Callbacks (die ich noch nicht ganz Begriffen habe) sind denke ich anfällig bezüglich Firewalls etc., aber zur Not wäre das ok.
Am liebsten wäre mir es, wenn so viel explizite Arbeit mit Threads wie nur möglich wegfällt. Bei RMI erstellt der Server zumindest für Clientanfragen aus anderen JVMs einen neuen Thread, das müsste man bei Sockets alles selber machen.
Wie würdet ihr das ganze lösen? Vielen Dank und schönen Abend.
edit: freue mich übrigens über Vorschläge aller Art. Also angefangen bei der Strategie bis hin zur Umsetzung. Aufgrund meiner geringen Erfahrung in dem Bereich habe ich dann später auch Detailfragen, aber alles zu seiner Zeit :)