2011-11-24 2 views
2

Java NIO를 처음 사용했습니다. 의문의 여지가 있습니다. 소켓 클라이언트 대신 NIO를 사용하는 경우 서버가 NIO를 사용해야합니까, 아니면 중요하지 않습니까?Java NIO는 서버와 클라이언트 모두에 있습니까?

응용 프로그램 확장성에 대해 우려하고 있습니다. 나는 서버 당 초당 약 500-1000 건의 클라이언트 요청을 조사 중이다. 최소한 3 개의 다른 서버로 데이터를 보내려고 했으므로 초당 약 1500 건의 클라이언트 요청을 살펴볼 때 이상적입니다. 이를 위해, 나는 꽤 괜찮은 일을하는 소켓 풀 구현을 이미 갖추고있다. 각 server.Each 스레드 풀에서 사용 가능한 소켓 연결을 집어 들고 나는 NIO 도울 수 있는지 확인하려고이거나 있어요

서버로 전송하기위한

는 내가 가지고있는 것은 소켓 연결 풀이다 어떤 방식 으로든 소켓 클라이언트보다 좋습니다. 차단하는 방법 은요? 일반 클라이언트는 차단하거나 시간 초과됩니다.

+1

NIO가 클라이언트보다 서버에서 더 유리하지 않습니까? 나는 그것이 클라이언트가 아닌 서버의 요구 사항 인 이유를 알지 못합니다. – jgauffin

+1

@jgauffin 나는 클라이언트에 대해서만 괴롭다. 서버는 TCP를 통해 데이터를 보내는 타사 응용 프로그램이다. 나는 오직 내 고객의 성과를 극대화하고자합니다. 내 옵션을 고려 중입니다. NIO를 클라이언트와 일반 소켓 클라이언트로 사용하는 것이 좋습니다. – Dunxton

+2

당신은 NIO를 사용하여 더 이상 고객의 성과를 얻지 못할 것입니다. 병목 현상은 서버 또는 네트워크 중 하나입니다. 또한 NIO는보다 복잡하며 성능을 해칠 수있는 무언가를 잘못 잡을 가능성이 큽니다. 간단하게 유지하고 응용 프로그램을 완성하십시오. – jgauffin

답변

4

중요하지 않습니다. TCP 스트림은 NIO 선택에 영향을받지 않습니다.

+0

+1 : 사실 귀하의 클라이언트 또는 서버는 C 또는 PHP 또는 들어 본 적이없는 플랫폼 일 수 있습니다. Java 7의 NIO2에도 똑같이 적용됩니다. –

2

imho NIO를 사용하면 더 이상 클라이언트에서 성능을 얻지 못할 것입니다. 병목 현상은 서버 또는 네트워크 중 하나입니다. 또한 NIO는보다 복잡하며 성능을 해칠 수있는 무언가를 잘못 잡을 가능성이 큽니다.

소켓 구현을 수행하여 시작하고 더 빨리 실행할 수 있습니다. Single Responsibility Principle과 같은 일반적인 패턴/원칙을 따르는 경우 나중에 구현을 전환하는 것이 쉽습니다 (귀하 또는 귀하의 사용자가 귀하의 응용 프로그램 성능이 내가 거의 찾아 볼 수없는 병목 현상이라고 입증 한 경우).

업데이트

무엇 NIO하거나 여러 작업이 같은 스레드를 공유 할 수 않는 다른 비동기 프레임 워크. 많은 연결을 처리 할 때 연결 당 하나의 스레드가있는 것은 모든 스레드가 항상 활성 상태가 아니기 때문에 자원 낭비입니다.

클라이언트에 NIO를 사용하면 몇 개의 연결 만 있으면 어떤 이점도 제공하지 않습니다. 연결 당 스레드 + 소켓을 사용하면 많은 리소스가 소모되지 않으므로 연결을보다 쉽게 ​​처리 할 수 ​​있습니다.

+0

클라이언트에 NIO를 사용한다고해서 몇 개의 연결 만 있으면 어떤 이점도 얻지 못할 것입니다. 그럼 NIO는 어떤 시나리오에서 유용할까요? 내 구현에서는 풀에서 50 개의 소켓 연결을 사용하고 매초 500 개의 스레드를 사용/재사용한다고 가정합니다. 그래서 스레드 모델마다 연결이 없습니다. – Dunxton

+0

500 개의 스레드가 있습니까? 그 스레드는 무엇을하고 있습니까? linux/osx 또는 windows를 사용하고 있습니까? – jgauffin

+0

Windows Server 2008 64 비트를 사용합니다. 간단히 설명하면, 제 응용 프로그램은 다리 역할을합니다. 초 당 500 개의 웹 서비스 요청을받습니다. tcp를 통해 목적지로 요청을 전송하는 작업으로 각 웹 서비스 요청마다 스레드가 생성됩니다.3 개의 목적지로 보내야한다면 요청 당 3 개의 쓰레드가 생성 될 것입니다. – Dunxton

관련 문제