현재 연결을 청취하는 서버가 있습니다.이 서버는 1000ms마다 연결을 루프하고 들어오는 데이터를 수신합니다. InputStream 논 블로킹으로 만들기
public void readData(Connection c) throws IOException {
PacketBuffer readBuffer = new PacketBuffer(Server.PACKET_CAPACITY);
int packetSize = c.getIn().read();
c.getIn().mark(packetSize);
byte[] buffer = new byte[packetSize];
c.getIn().read(buffer, 0, buffer.length);
readBuffer.setBuffer(buffer);
packetHandler.addProcess(c, readBuffer);
}
나는 내 자신의 PacketBuffer을 사용하고 c.getIn가(). 차단하지 않습니다 (그건 내 연결의 InputStream입니다)) (읽을 수 있도록 나는 방법을 찾을 필요가있다. 현재 소켓은 500ms 타임 아웃으로 설정되어 있고, 서버는 그렇게 잘 돌아갈 것입니다. 내 문제는 누군가 자신의 프로그램을 만들어 자신의 최고 기록 또는 해킹 시도에 연결하려고 시도하는 경우 연결이 쓰여지지 않을 때 500ms 동안 스레드를 차단하는 쓸모없는 연결이 번들로되어 버립니다.
이 코드는 손으로 직접 작성한 코드 대신 Netty의 작업처럼 들립니다. – chrylis