Choosing between multiple sockets that are ready to be read from

I am writing a server-client application. I have a server that contains multiple sockets which I got from the accept () ServerSocket method. I want to read from these sockets, but I don't know which socket is ready to read. I need some sort of selector that will select one of the sockets ready to read, so I can read the data sent to them.

Thank.

+2


source to share


1 answer


You basically have two options to make it work:

  • Have a dedicated thread for each socket. This is because "regular" socket I / O is blocked. You cannot selectively handle multiple sockets with a single thread. And since there is no peeping functionality, you always run the risk of getting a lock when called read

    . By having a stream for each socket that you are interested in reading, blocking reads will not block other operations (threads).
  • Use NIO. NIO allows for asynchronous I / O and basically exactly what you asked for - a selector.


If you decide to go the NIO-way, I would recommend checking out MINA and Netty . I found them much easier to work with than a simple NIO. Not only will you get a nicer API to work with, but at least MINA had workarounds for some nasty NIO bugs too.

+1


source







All Articles