# SocketChannel + Write



## lumo (25. Aug 2009)

Hallo,

ich finde nur beispiele, wo der client sich verbindet und gleich ne message schickt,
in meinem fall muss nach dem verbinden aber der server den ersten schritt machen, also beim connect schon ne message schicken. hab das ganze mit simplen Sockets programmiert, da funktionierts auch, nur find ich nicht raus, wie ich das mit dem SocketChannel mach...

note: meine vorlage ist dieses beispiel von sun:
Working with Selectors and SSL Servers Tech Tips


----------



## habnefrage (25. Aug 2009)

Moin, ich habs mir mit diesem Beispiel erarbeitet.

Working with Selectors and SSL Servers Tech Tips


----------



## habnefrage (25. Aug 2009)

Huuuch


Was genau kriegst du denn nicht hin?


----------



## lumo (25. Aug 2009)

habs jetzt mit nem normalen socket gelöst...
die scheinen mir etwas einfacher...

mein problem war einfach ein kleiner server, der sofort beim verbinden ne message schickt.
so etwa...

```
if (socket.accept())
socket.write("hallo welt")
```


----------



## habnefrage (25. Aug 2009)

Naja, schwieriger ist es nicht, nur etwas mehr Quähltext, der aber mit jeder menge Boni einhergeht.

Hast du denn nichts bzgl. der Selectoren in dem o.g. Tutorial gelesen? Einfach auf ein Accept warten ist bei nio nicht updatodate. Du erzeugst einen Channel, Registrierts dafür einen Selector (ACCEPTABLE) und musst dann noch einen Thread haben der über die SelectionKeys des Selectors iteriert. Wenn ein ACCEPTABLE Key anliegt, dann rufst du Accept auf.

Das hat den großen Vorteil dass deine Software nicht die ganze zeit dumm herum steht während sie auf den Connect wartet.


----------



## sparrow (25. Aug 2009)

habnefrage hat gesagt.:


> der aber mit jeder menge Boni einhergeht.



Welche, wirklich wichtigen Boni, gehen denn einher?


----------



## habnefrage (25. Aug 2009)

Ich bastel zur Zeit an einem Proxy, der ca. 200 Verbindgunen vom Kunden engegennimmt, und jeweils 3 bis vier dafür auf der anderen Seite (Zur Lastverteilung) wieder aufmacht. das Wäre mit der alten Art und Weise (Für jeden Socket ein Thread) ca. 600 - 800 Threads. Eine last die kein System verträgt. Dank NIO nur ein einziger Thread der die ganze Zeit über die SelectionKeys iteriert und dann kurz ein Read aufruft.

Nur ein beispiel, gibt sicher noch tausend andere.


----------



## sparrow (25. Aug 2009)

Da die meisten Threads ja schlafend gelegt sind werden diese das Systen kaum blockieren.

Wenn sie doch alle arbeiten wird eher die Bandbreite das Problem sein, und das hast du bei NIO auch.


----------



## tuxedo (25. Aug 2009)

Seh ich auch so... Gerade bei einem Proxy sind nicht sooo viele Verbindungen gleichzeitig dauerhaft offen. 

Aber mal davon abgesehen: xSocket oder MINA oder Netty oder Grizzly (oder oder oder) vereinfachen die NIO Nutzung ungemein... Zu Fuß würde ich kein NIO mehr machen wollen... 

- Alex


----------



## lumo (28. Aug 2009)

hmm, werd mir doch mal xsocket ansehen...

hab den server zwar mittlerweile schon fertig...
und bei mir connecten derzeit maximal 32 leute...
trotzdem, wenn ich weiss, wie man was besser machen kann... will ich das auch so machen


----------



## tuxedo (28. Aug 2009)

xSocket ist ideal wenn du wirklich auf unterster ebene "rumwerkeln", dich aber mit NIO nicht rumärgern willst.

MINA und Co. sind da noch ein Stück besser, denn sie abstrahieren nochmal weiter und ermöglichen es ein eigenes, recht flexibles Protokoll aufzusetzen, dem es dann Egal ist welche Art von Kommunikation "drunter" stattfindet. 

Rate dir mal beides anzusehen bevor du dich entscheidest.

- Alex


----------



## lumo (28. Aug 2009)

habs jetzt schon mit xsocket umgesetzt...

das ist ja mal ein nettes package 

danke für eure infos/hilfe!


----------

