Grundlegende Design-Frage zu Webservices

Status
Nicht offen für weitere Antworten.
5

555Nase

Gast
Hallo,

wie würdet Ihr folgendes Problem implementieren:

- Eine bestimmte Anzahl an Webservices schickt eine zufällige Integer-Zahl an einen Webservice Server
- Als Antwort schickt der der Server die Summe der Zahlen an alle Clients

Voraussetzung:
- Kein Client weiß, wie viele andere Clients es noch gibt
- Der Server kennt die Anzahl der Client.
- Sobald der letzte seine Zahl übermittelt hat, schickt der Server unmittelbar die Antwort


Danke
 

Niki

Top Contributor
Soll der Server die Antworten asynchron schicken oder soll die service-Methode solange blockieren bis alle Clients ihre Zahlen geschickt haben?
 
5

555Nase

Gast
Danke,

der Service muss warten, bis alle Clients ihre Zahl geschickt haben, sonst kann der nicht die korrekte Summe addieren.
 

Niki

Top Contributor
Wenn die Methode blockieren soll würd ichs so machen:

Code:
private static final Object MONITOR = new Object();
private static final int anzahlClients = 5;

private static final List<Integer> zahlen = new ArrayList<Integer>();

public int getSum(int random){
  synchronized(MONITOR){
    zahlen.add(random);
    if(zahlen.size() < anzahlClients){
      try{
        MONITOR.wait();
      }catch(InterruptedException ex){
      }
    } else {
      MONITOR.notifyAll();
    }
  } 
  int sum = 0;
  for(Integer i : zahlen)
    sum+=i;
  return sum;
}
 
5

555Nase

Gast
Hallo,

nochmals vielen Dank für den obigen Code.

Noch eine ganz kurze Nachfrage:

Angenommen, es nicht darum , die Summe zu berechnen, sondern die Antwort des Webservices soll einfach nur die Reihenfolge des Aufrufs sein, also

1. Client bekommt eine 1 zurück
2. Client bekommt eine 2 zurück
3. Client bekommt eine 3 zurück
usw.

natürlich erst, nachdem anzahlClients erreicht ist.

Meine Idee bisher: Ich spalte das in 2 Methoden auf. Jeder Client schickt eine Zufallszahl mit der ersten Methode. Die Zahl wird dann in eine Liste geschrieben.

Mit der zweiten methode übergibt der Client erneut seine Zufallszahl und es wird die Stelle zurückgegeben, an der die Zufallszahl steht.

Könnte man das auch in eine Methode setzten?

Danke
 
5

555Nase

Gast
Nachtrag: Natürlich könnte man die gesamte Liste zurückgeben, allerdings wird die bei vielen Clients recht groß
 

Niki

Top Contributor
Naja, Zufallszahlen die die Clients generieren müssen ja nicht umbedingt eindeutig sein, du kannst dir eine eindeutige ID zuerst vom Server generieren lassen, ist aber nicht notwendig, wenn du wissen willst an welche Stelle dein Client war genügt eine statische Variable:
Code:
private static final Object MONITOR = new Object();
private static final int anzahlClients = 5;

private static final List<Integer> zahlen = new ArrayList<Integer>();

private static int counter = 0;

public int getSum(int random){
  int num = 0;
  synchronized(MONITOR){
    counter++;
    num = counter;
    zahlen.add(random);
    if(zahlen.size() < anzahlClients){
      try{
        MONITOR.wait();
      }catch(InterruptedException ex){
      }
    } else {
      MONITOR.notifyAll();
    }
  }
  int sum = 0;
  for(Integer i : zahlen)
    sum+=i;
  return num;
}
 
5

555Nase

Gast
Danke, funktioniert. Hatte zunächst die Befürchtung, daß er an alle die letzte Zahl zurückgibt...
 
5

555Nase

Gast
Hallo,

es gibt ein kleines Problem: Leider funktionieren all diese Methoden nur mit 2 und nicht mit mehr Clients. Ich hatte das vorher auch nur mit 2 Methoden getestet. Weißt Du, woran das liegen könnte? Ich teste sie mit der Webservice-Testfkt. aus Glassfish+Netbeans.

Danke
 

Niki

Top Contributor
Pfuh, gib mir einen Moment Zeit, dann kann ich mir schnell ein Web-Service basteln...
Ich geb dir bescheid wenn ich etwas heraus finden konnte bzw. ob es bei mir klappt.
 

Niki

Top Contributor
Bei mir funktioniert die Methode zum Aufsummieren. Mit Tomcat und Axis1.4.

Kann dir daher leider nicht weiter helfen.

Schönen Abend, ich bin jetzt dann mal weg....
 

Niki

Top Contributor
Und, Fehler gefunden? Hast du bei anzahlClients vielleicht 2 zugewiesen? Das würde natürlich erklären warum es nur bei 2 geht!
 
5

555Nase

Gast
Danke der nachfrage. In der Tat klappt es auch mit mehr als 2 Clients. Ich weiß ehrlich nicht genau woran es lag, kann es sein daß alle Var "static" sein müssen?

Vielleicht mal ganz kurz zu meinem Problem. Es geht in meinem Projekt darum, ein Gebotsystem zu erstellen. Jeder Client gibt ein Gebot ab und der Gewinner erhält den Zuschlag. Deswegen suchte ich auch eine Lösung, bei der erst nach Abgabe von Informationen durch alle Clients alle Clients die Antwort erhalten. Im folgenden soll nur Client 2Gewinner sein, alle anderen Verlierer. Meine Methode sieht so aus:
Code:
private static boolean Won=true;
 private static int Counter = 0;
     @WebMethod(operationName = "Winner")
    public boolean Winner() {
        int num = 0;
        //TODO write your implementation code here:
        synchronized (MONITOR) {
            Counter++;
            num = Counter;
            if (num==2) {Won=true;} else {Won=false;}
            if (num < anzahlClients) {
                try {
                    MONITOR.wait();
                } catch (InterruptedException ex) {
                }
            } else {
                MONITOR.notifyAll();
            }
        }

        return Won;

    }

Was ich jetzt nicht verstehe, wieso alle Clients false erhalten?

Nochmals vielen Dank!
 
5

555Nase

Gast
äh, sorry

Code:
 private static int Counter = 0;
  private static boolean Won=true;
     @WebMethod(operationName = "Winner")
    public boolean Winner() {
        int num = 0;
        //TODO write your implementation code here:
        synchronized (MONITOR) {
            TruckCounter++;
            num = Counter;
            if (this.Counter==2) {Won=true;} else {Won=false;}
            if (num < anzahlClients) {
                try {
                    MONITOR.wait();
                } catch (InterruptedException ex) {
                }
            } else {
                MONITOR.notifyAll();
            }
        }

        return Won;

    }
 
5

555Nase

Gast
nochmals sorry

Code:
private static int Counter = 0;
  private static boolean Won=true;
     @WebMethod(operationName = "Winner")
    public boolean Winner() {
        int num = 0;
        //TODO write your implementation code here:
        synchronized (MONITOR) {
            Counter++;
            num = Counter;
            if (this.Counter==2) {Won=true;} else {Won=false;}
            if (num < anzahlClients) {
                try {
                    MONITOR.wait();
                } catch (InterruptedException ex) {
                }
            } else {
                MONITOR.notifyAll();
            }
        }

        return Won;

    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Grundlegende Fragen zu einem Verbindungsaufbau in einem LAN Netzwerkprogrammierung 15
S HTTP Grundlegende Fragen zu java multithreading & Glassfish Netzwerkprogrammierung 3
J Frage zum Keystore Netzwerkprogrammierung 21
E Socket Frage Netzwerkprogrammierung 6
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
C Jetty 9 Non Blocking Handler Frage... Netzwerkprogrammierung 1
O log4j Appender Frage Netzwerkprogrammierung 6
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
C Frage zu Threads & Server Netzwerkprogrammierung 4
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
M allgemeine Frage zu einem Web Service Client Netzwerkprogrammierung 2
Q Frage zur Socketprogrammierung Netzwerkprogrammierung 12
D HTTP Frage zu Login & Session ID Netzwerkprogrammierung 5
D HTTP nochne frage zu http requests Netzwerkprogrammierung 6
D "Fileserver" Frage + Mit Java zugreifen Netzwerkprogrammierung 9
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
Helgon Socket Socket IP Frage + Tutorial/Bücher Netzwerkprogrammierung 5
C Webservice Frage Netzwerkprogrammierung 2
M RMI Code Frage: Netzwerkprogrammierung 4
C Frage zur Klasse DatagramPacket Netzwerkprogrammierung 2
S Einfache Server Frage Netzwerkprogrammierung 5
xDarkSunx Kleine Frage authentifizierung Netzwerkprogrammierung 13
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
H Input-/OutputStream Frage Netzwerkprogrammierung 6
N Frage zu JNDI Netzwerkprogrammierung 2
B Frage zu einer Lösung (RMI) Netzwerkprogrammierung 2
X FAQ Frage - Netzwerkgrundlagen - ServerSocket und Socket Netzwerkprogrammierung 4
G Netzwerk IP Frage Netzwerkprogrammierung 4
S NanoHTTPD Server frage Netzwerkprogrammierung 5
E einfache Frage: wie Fehler untersuchen mit Tomcat Netzwerkprogrammierung 5
E Einfache Frage zu servlets und netbeans 6.5 Netzwerkprogrammierung 41
N Frage/Problem mit RMI Netzwerkprogrammierung 3
Kr0e Frage zu SO_TIMEOUT Netzwerkprogrammierung 3
K SCP und die Frage: Wie geh ich damit um? Netzwerkprogrammierung 7
K Frage zum Verhalten von SocketChannel.write(.) Netzwerkprogrammierung 9
G Frage zu Serversocket-Beispiel aus der FAQ Netzwerkprogrammierung 17
A Frage zur Verschlüsselung mit CipherInputStream Netzwerkprogrammierung 7
H Frage zu RMI Netzwerkprogrammierung 4
C Frage zur ipcam WVC54GC von linksys ? Netzwerkprogrammierung 1
ven000m Mittlere Wartezeit Frage Netzwerkprogrammierung 5
T Frage bei Irc Verbindung Netzwerkprogrammierung 10
ven000m Frage aus einer mündl. Prüfung - wer kennt die Antwort? Netzwerkprogrammierung 6
S Serveranfrage - allgemeine Frage Netzwerkprogrammierung 2
ven000m Thread Frage Netzwerkprogrammierung 11
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
H Frage zur Performance Netzwerkprogrammierung 10
flashfactor Frage zu HTML-Response Netzwerkprogrammierung 4
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
K Frage zu Net Send Netzwerkprogrammierung 7
G Frage zu JNDI / RMI Netzwerkprogrammierung 4
A ServerSocket prinzipielle Frage Netzwerkprogrammierung 5
M generelle Frage zum Versenden Netzwerkprogrammierung 4
L Frage nach Socket Netzwerkprogrammierung 4
E frage zu streams Netzwerkprogrammierung 2
Luma Verschiedene Frage zu nem Netzwerkprog Netzwerkprogrammierung 6
G einfache Frage zu ServerSocket ... Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben