发现是因为客户端关掉以后,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;
}
}