2011-01-11 2 views
2

확장 가능한 다중 스레드 소켓 푸시 서버 in .Net은 처음에 노드 당 10K 클라이언트를 처리합니다. 이 설계는 매우 복잡 할 수 있기 때문에 모든 전문가가 모든 지침, 자원, 모범 사례 등을 제공 할 수 있다면 정말 도움이 될 것입니다.닷넷에있는 "Scalable Multi Threaded Socket Push Server"설계

소켓 프로그래밍에 대해 많이 알지 못하므로 누군가 제게 제안 할 수 있다면 정말 좋습니다. 시작하는 opensource 프로젝트 ... 나는 그것을 봤지만 어떤 좋은 해결책도 찾을 수 없었다.

이렇게하면 이러한 서버를 설계하려는 다른 사람들에게도 도움이됩니다.

내가 비동기 소켓과 Pinning related problem에 관한 정보를 많이 읽고있다

[참고로 우리는이 서버 닷넷 4.0을 사용할 계획]. 그 문제는 여전히 닷넷 4.0에 존재합니까? 고급의

감사합니다 ...

+0

이 길을 잘못하지 않습니다 하지만 작은 소켓 프로그래밍 경험이 있다면 "처음에는 노드 당 10K 클라이언트를 처리 할".Net의 Scalable Multi Threaded Socket Push Server를 설계하는 것이 좋습니다. –

+0

나는 소켓 경험이 거의 없지만 나는 아주 좋은 개발자라고 생각한다. 또한이 프로젝트를 시작하기 전에 주제를 공부할 시간이 충분하므로 충분히 공정합니다 .... –

+0

나는 또한이 쿼리를 가지고있는 나 같은 많은 사람들이있을 것이라고 믿는다. 이 질문에 대한 대답은 그들 모두에게 도움이 될 것입니다 ... –

답변

5

합리적인 하드웨어에서 .Net을 사용하는 동시 연결은 그다지 문제가되지 않지만 항상 서버에서 수행중인 작업과 각 연결이 서로 분리 된 방식에 따라 다릅니다. 결국, '노드 당 10k 클라이언트 처리'는 각 노드의 하드웨어 요구 사항, 각 연결에서 유입 및 유출되는 데이터의 양 및 각 연결의 예상되는 CPU 양을 정의하지 않으면 아무런 의미가 없습니다. 그것의 일을 할 필요가있다. 여기이 모호한, 손 웨이브 형 확장 성 문제에 대해 이야기 : 그러나 http://www.serverframework.com/asynchronousevents/2010/12/one-million-tcp-connections.html

:

먼저 당신이 비동기 소켓 API보고 거의 스레딩 문제를 무시해야한다. 닷넷의 비동기 소켓은 당신을 위해 스레딩을 관리하고 I/O 완료 포트 (매우 확장 가능한 커널 객체)를 사용하여 스레딩을 관리합니다.

또한 비동기 전송을 사용하는 경우 TCP 흐름 제어가 시작될 때 완료하는 데 오랜 시간이 걸릴 수 있습니다 (here 참조).

및 ...

둘째

당신이 일 0에서 확장 성을 테스트하고 개발을 통해 그것을 모든 방법을 테스트 유지해야 - 내가 왜 여기에 대해 쓸 : http://www.serverframework.com/asynchronousevents/2010/10/how-to-support-10000-or-more-concurrent-tcp-connections---part-2---perf-tests-from-day-0.html

+0

대단히 고맙습니다. 꼭 당신의 의견을 고려할 것입니다 ... –

0

어떤 사람들은 '확장 성'과 '다중 스레드가'상호 모순 말할 수 있습니다. 그런 결정을 내리는 전에 디자인 공간을 탐험해야합니다. 확장 성이 필요한 경우 하나의 스레드 만 사용할 수도 있지만 제공하는 대상에 따라 다릅니다.

+0

다른 답변에서 제안한대로 비동기 소켓 연결을 사용합니다. 닷넷은 스레딩 물건을 처리합니다 ... –

0

확장 성이 가장 중요한 우선 순위 중 하나이며 안정성을 가정 할 때 얼랭 (Erlang)이 적합한 것으로 나타났습니다. 내결함성이 있으며 확장 성이 뛰어납니다. 다른 옵션을 조사 할 시간이 있다면 적어도 저것을 살펴 보길 권합니다.

+0

이벤트 얼랑에 대해 조금이라도 지식이 없지만 , 나는이 옵션을 확실히 볼 것이다. 감사. –