/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
NIO: Selector og SocketChannel
Fra : Daniel Jacobsen


Dato : 28-05-03 15:37

Jeg har en server der servicerer en række klienter. For hver klient
registrerer jeg en SocketChannel for både READ og WRITE i en Selector:

public void registerClient(Client c, SocketChannel sc) throws
ClosedChannelException {
sc.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE, c);
}

Jeg lytter på Selector'en med koden:

int keysAdded = 0;
while ((keysAdded = selector.select(WAIT_TIME)) > 0) {
Set readyKeys = selector.selectedKeys();
Iterator i = readyKeys.iterator();
while (i.hasNext()) {
SelectionKey key = (SelectionKey)i.next();
i.remove();
if (key.isReadable()) {
...
} else if (key.isWritable()) {
...
}
}
}

Når nu en SocketChannel er klar til at blive læst fra er det jo nemt, man
læser blot til en ByteBuffer og gør hvad man ellers vil. Mit problem er, når
nu en anden tråd i min server skal sende til en given klient. Hvordan gør
jeg en SocketChannel "writable", for der skal jo først skrives med
SocketChannel.write(ByteBuffer), når Selector'en siger at en SocketChannel
er writable, eller hvordan foregår det? Håber problemet er forståeligt.



 
 
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste