Hi,
ich versuche mich gerade das ganze etwas zu nutzen.
Dabei stoße ich hauptsächlich auf zwei Fragen:
1) Beim Server:
Ich registriere meine Clients bei einem Selektor mittels
[Java]client.register(selector, SelectionKey.OP_READ & SelectionKey.OP_WRITE);[/Java]
In einer Schleife wird nun halt immer wieder Selector.select() aufgerufen.
Problem bei der ganzen Sache sehe ich darin, dass wenn im Moment gerade nichts zu senden/lesen ist, der Selector mir trotzdem immer wieder alle Clients liefert, da diese ja schreibbereit sind.
Ich rattere also in einem fort durch meine while-Schleife ohne etwas zu tun und verbrauche nur unnötig Rechenkapazität.
Gibt es dafür irgendeine Lösung?
2)Beim Client:
Eher eine Stilfrage meiner Meinung nach - dennoch: wie würdet ihrs machen.
Den SocketChannel des Clients als "blocking" und zwei Threads: einer zum lesen, einer zum schreiben oder "non-blocking" und ein Thread zum lesen und schreiben.
Ich tendiere zu ersterem, da letze Lösung das gleiche Problem hat, dass ich bezüglich des Servers angesprochen hat (sofern es dafür keine Lösung gibt).
ich versuche mich gerade das ganze etwas zu nutzen.
Dabei stoße ich hauptsächlich auf zwei Fragen:
1) Beim Server:
Ich registriere meine Clients bei einem Selektor mittels
[Java]client.register(selector, SelectionKey.OP_READ & SelectionKey.OP_WRITE);[/Java]
In einer Schleife wird nun halt immer wieder Selector.select() aufgerufen.
Problem bei der ganzen Sache sehe ich darin, dass wenn im Moment gerade nichts zu senden/lesen ist, der Selector mir trotzdem immer wieder alle Clients liefert, da diese ja schreibbereit sind.
Ich rattere also in einem fort durch meine while-Schleife ohne etwas zu tun und verbrauche nur unnötig Rechenkapazität.
Gibt es dafür irgendeine Lösung?
2)Beim Client:
Eher eine Stilfrage meiner Meinung nach - dennoch: wie würdet ihrs machen.
Den SocketChannel des Clients als "blocking" und zwei Threads: einer zum lesen, einer zum schreiben oder "non-blocking" und ein Thread zum lesen und schreiben.
Ich tendiere zu ersterem, da letze Lösung das gleiche Problem hat, dass ich bezüglich des Servers angesprochen hat (sofern es dafür keine Lösung gibt).