# Nachrichten-Polling?



## Beren77 (1. Dez 2004)

Hallo,

ich schreibe gerade an einem Schachspiel und möchte da auch Netzwerkfähigkeit anbieten: Zwei Spieler sollen gegeneinander an verschiedenen Rechnern spielen können.

Also hab' ich als ersten Schritt mal eine Chat-Anwendung geschrieben, die einen ServerSocket anlegt, so dass sich ein Socket damit verbinden kann. Bis dahin: Kein Problem.

Ich kann auch Nachrichten zwischen zwei Anwendungen austauschen. Auch alles bestens.

ABER: Wie geh' ich denn dabei eigentlich am geschicktesten vor? Bislang mache ich es so, dass ich den Chat-Teilnehmern sage: "Schau mal nach, ob eine Nachricht angekommen ist. Nein? Dann schlafe 5s. Ja? Anzeigen. -- Und das mach' jetzt bitte so lange Du nicht beendet bist." -- Kürzer: Ich polle alle 5 Sekunden.

Das kann ja wohl eigentlich nicht im Sinne des Erfinders sein, oder? Das ist doch viel zu "teuer" (im Sinne von Performanz). Gibt es nicht so etwas wie einen "SocketListener", der mir sagt: "Hey Du! -- Willst Du 'ne Nachricht kaufe... ääääh... abrufen? Es ist gerade frisch eine angekommen..." --- also in dem Stil wär's jedenfalls optimal (nun gut: Vielleicht nicht ganz so prosaisch, aber ihr versteht, worauf ich hinaus will, oder?)

Gibt's da irgendwas?
Wie machen das denn ICQ oder MSN? Pollen die auch alle x Sekunden???? Kann ja eigentlich nicht sein... 

Danke für die Hilfe/Ideen/Links/...
Philipp


----------



## Illuvatar (1. Dez 2004)

Na du holst den InputStream vom Socket und liest. Und wenn der andere grad nix schreibt, blockiert die Methode halt bis der andere was schreibt.


----------



## Grizzly (1. Dez 2004)

Eine Möglichkeit wäre, Java Messaging Framework zu benutzen. Dort wird ein Listener aufgerufen, wenn eine Nachricht anliegt. Aber das JMF ist dann wohl doch etwas zuviel des Guten (=> Overkill). Intern wird das aber wahrscheinlich ähnlich gelöst sein.
Ich wüsste ansonsten auch nicht, wie man das lösen will. Außer über Interrupts. Aber die gibt es ja in Java nicht  .


----------



## Beren77 (1. Dez 2004)

Hmmm... Okay... Dann doch mit Thread.sleep...

"Illuvatar": Wenn die Methode blockiert muss ich halt eben den aktuellen Thread schlafen legen, damit der mir nicht meine Schach Engine blockiert... Sonst macht der Computer ja nur noch doofe Züge ;-)

Übrigens: Wenn Du "den" Ilúvatar meinst, wird der genau so geschrieben... Ein "l" und ein ´ auf dem u ;-))


----------



## Illuvatar (1. Dez 2004)

Ja das solltest du vielleicht besser in nem eigenen Thread machen. Die Methode blockiert ja nur den Thread, der sie aufruft.

Ja, ich meine Ilúvatar, und ich weiß wie man ihn schreibt, _Beren_ 
Aber als ich damals meinen ICQ-Account gemacht hab, hat sich irgendwie das zweite l eingeschlichen, und ú geht da glaub ich net.


----------



## Beren77 (1. Dez 2004)

Pascht scho! Keine Ahnung ob Sonderzeichen in Nicks funktionieren *Grübel*... Daher ja auch "Beren", das ist einfacher---war aber schon vergeben, daher 77. Anyway: Danke für die Hilfe. Der Chat funktionier. Ich find das mit dem Polling zwar nicht toll, aber egal.


----------

