2010-08-09 3 views
6

저는 자바에서 고성능 서버를 만들고 싶을 때 일반 소켓 대신에 nio를 사용한다는 것을 알고 있습니다. 고성능 서버를 만들려면 C#과 같은 것이 있습니까?C# ==> 고성능 서버?

+1

나는 최근에 당신이 흥미를 가질 수 있음을 알았다 : http://developers.slashdot.org/story/10/07/27/1925209/Java-IO-Faster-Than-NIO – AaronLS

+0

@AaronLS : 그것은 nio처럼 보입니다. .NET 소켓은 비동기 소켓 라이브러리이지만 .NET 소켓은 두 가지 방식으로 작동합니다. –

+2

소켓 클래스는 언어에 관계없이 .NET에서 동일하므로 태그를 변경했습니다. –

답변

11

예, SocketAsyncEventArgs :

SocketAsyncEventArgs 클래스는 전문 고성능 소켓 에서 사용할 수있는 대체 비동기 패턴을 제공 System.Net.Sockets.Socket 클래스의 개선 사항의 일부 입니다 응용 프로그램. 이 클래스는 높은 성능이 필요한 서버 응용 프로그램 인 네트워크 용으로 특별히 설계된 입니다. 응용 프로그램에서는 향상된 비동기 패턴 만 사용하거나 대상이되는 영역 (예 : 많은 양의 데이터를 수령 한 경우)에서만 사용할 수 있습니다.

+3

음, 이건 잘못된 것은 아니지만, 실제로'Socket'에 대한 특정 종류의 비동기 호출을위한 이벤트 유형일 때, 보통'Socket' 대신에 * 사용되는 특수 클래스 인 것처럼 들립니다. . –

+2

SocketAsyncEventArgs를 사용한 프로그래밍은 확실히 '특정 종류의 비동기 호출에 대한 이벤트'가 아닙니다. 프로젝트를 시작할 때 동기화 호출 사용, 클래식 비동기 (beginend/callback/endsend) 사용 또는 SocketAsyncEvent 사용을 선택해야합니다. 버전 3.5의 소켓 성능 향상 참조 http://msdn.microsoft.com/en-us/library/bb968780.aspx –

0

일반 소켓을 사용하는 방법에는 여러 가지가 있습니다. 일반적으로 비동기 사용이 확장됩니다.

2

비동기 소켓을 사용할 수 있습니다. 그 중 하나가 충분하지 않은 경우 항상 HPC SDK의 일부인 Network Direct SPI을 확인할 수 있습니다. Network Direct에는 하드웨어 별 공급자가 필요하다는 점에 유의하십시오.

+0

+1 네트워크 직접 관리 API가 없습니다. –

+0

이것은 흥미로운 것처럼 보이지만, 하드웨어 별 요구 사항은 훌륭한 아이디어인지 궁금합니다. 흥미롭지 만 어쩌면 현명하지 못한 옵션은 P/Invoke를 사용하는 것입니다. –

+0

감사합니다. 비동기가 아닙니다. 5k 클라이언트가 서버에 연결되어 있고 연결되어 있고 서버와 통신하고 있습니다. 네트워크 직접 SPI를 살펴 보겠습니다. 감사합니다. – aryaxt

1

SocketAsyncEventArgs는 Windows I/O 완료 포트를 사용하므로 처리 속도가 빠릅니다. 비동기식으로 확장 가능합니다. SocketAsyncEventArgs의 큰 이점은 I/O 완료 포트입니다.

SocketAsyncEventArgs를 사용하는 방법은 http://www.codeproject.com/KB/cs/socketasynceventargs.aspx을 참조하십시오.