비슷한 질문이 이미 제기되었다고 생각되지만 어떤 것도 찾을 수 없었습니다. 언제든지 기존 솔루션을 알려주십시오.C#에서 많은 클라이언트를위한 프로그래밍하기 쉬운 서버를 만드는 방법은 무엇입니까?
내 시나리오를 설명합니다. 서버 응용 프로그램을 만들고 싶습니다. 한 대의 컴퓨터에서 실행되는 서버에 연결하는 많은 클라이언트 (현재는 수십 가지이지만 최대 1000+ 이상으로 확장해야 함)가 있습니다.
각 클라이언트는 주기적으로 처리 할 서버에 소량의 데이터를 보냅니다 (처리가 빠름). 또한 서버는 정기적으로 각 클라이언트에 소량의 데이터를 보낼 수 있습니다. 응답 시간은 낮아야하며 (< 100ms) 실시간 또는 이와 유사한 것은 필요하지 않습니다.
VB6에서 프로그래밍 중이던 때가 처음 생각났습니다. 들어오는 요청을 수신 할 서버 소켓을 만든 다음 가능한 클라이언트 (singlethreaded)마다 클라이언트 소켓을 만듭니다. 나는 이것이 잘 비늘하다고 생각한다. 또한 의사 소통을 구현하기가 어렵습니다.
그래서 나는 새로운 클라이언트 연결을 받아들이는 청취자 스레드와 실제로 클라이언트가 들어오는 데이터를 읽는 다른 스레드를 만들 것이라고 생각했습니다. 많은 클라이언트가 있기 때문에 각 클라이언트에 대한 스레드를 만들고 싶지 않습니다. 대신 단일 스레드를 사용하여 루프에서 들어오는 모든 데이터를 읽은 다음이 데이터를 직접 처리하거나 처리 할 다른 스레드에 대한 작업 항목을 만드는 것을 선호합니다. 이 방법이 충분히 확장 될 것으로 생각합니다. 이 아이디어에 대한 의견은 언제나 환영합니다.
걱정되는 나머지 문제는 의사 소통이 쉽습니다. 위의 해결책은 TCP를 통해 ASCII 명령을 보내는 수동 프로토콜을 요구하는 것 같습니다. 이 이 일을하는 동안, 나는 더 나은 방법이 있어야한다고 생각합니다.
일부 인터페이스/프록시 방식은 합리적인 것처럼 보입니다. 이전에 Java RMI에서 약간 작업했습니다. 이해의 제 시점에서 .NET Remoting은 비슷한 목적을 제공합니다. Remoting은 내가 설명한 시나리오 (많은 고객)에 대한 실현 가능한 솔루션입니까? 내가 아직 모르는 더 좋은 방법이 있습니까?
편집 :
- 이 LAN에서 아니지만, 인터넷, 그것은 중요합니다.
- 가능하면 Linux에서도 실행해야합니다.
WCF가이를 수행하는 더 좋은 방법입니다. –