Reactor模式

读了第一章,将TCPReactor,TCPAcceptor,TCPHandler测了测,发现CPU利用率为100%.原因是TCPHandler的read()总是会被调用,不管从客户端是否有数据要传过来.

下了班,有点时间,又看了看.
发现是因为客户端关掉以后,selector.select();不会阻塞,TCPHandler的
read()被调用后,int bytes = sc.read(buffer);总是返回-1.而现在TCPHandler的read()只是返回.这样一来,客户端关掉以后,TCPReactor线程会一直占有CPU.
private void read() throws Exception
{
...
int bytes = sc.read(buffer);
if (bytes == -1)
{
return;
}
}

如果返回-1时,将SocketChannel关闭,我想能解决问题.
private void read() throws Exception
{
...
int bytes = sc.read(buffer);
if (bytes == -1)
{
sc.close();
return;
}
}