SocketChannel + Write

Status
Nicht offen für weitere Antworten.

lumo

Top Contributor
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
 

lumo

Top Contributor
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...
Java:
if (socket.accept())
socket.write("hallo welt")
 

habnefrage

Mitglied
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.
 

habnefrage

Mitglied
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

Top Contributor
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.
 
T

tuxedo

Gast
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

Top Contributor
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 ;)
 
T

tuxedo

Gast
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

Top Contributor
habs jetzt schon mit xsocket umgesetzt...

das ist ja mal ein nettes package :)

danke für eure infos/hilfe!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben