저는 C#으로 서버를 개발하고 있습니다. 이 서버는 백업 서비스를위한 데이터 서버의 역할을합니다. 클라이언트는 데이터, 많은 데이터를 지속적으로 보내고, 특히 동일한 TCP 채널에서 최대 5 개의 파일 데이터를 전송합니다. 나는 서버에 데이터를 천천히 보낼 것이다. 나는 고객 대역폭을 죽이고 싶지 않다. 그래서 최대 데이터 전송 속도를 높일 필요가 없으며, 이런 이유 때문에 모든 것을 위해 단일 TCP 채널을 사용할 수있다.Socket.BeginReceive Mono 성능
실제로이 서버는 BeginReceive 메서드를 사용하여 클라이언트에서 데이터를 수집하고 Windows에서는 IOCP를 의미합니다. 내 질문은 : BeginReceive가 linux/freebsd trough mono에서 어떻게 작동할까요? 창문에서, 나는 많은 것들을 읽었고, 잘 수행 할 것이지만,이 소프트웨어, 서버 부분은 리눅스 나 freebsd trough 모노에서 실행될 것입니다. 그리고이 방법들이 어떻게 구현되는지 모르겠습니다!
더 많은 것을 얻으려면 (Begin | End) Receive 메서드에 대한 비동기 상태 개체의 할당을 계속 줄여야합니다. tcp 연결과 BeginReceive 콜백에서 데이터를 복사하기 전에 복사합니다. 내가 얼마나 많은 물음에 EndReceive 반환 값을 알고 있기 때문에 t 데이터를 지우십시오. 버퍼가 8kb로 설정되어 있으므로 최대 8KB의 데이터를 복사 할 수 있습니다. 리소스를 죽이지 않아야합니다.
내 목표는 최대 400/500 접속을 얻는 것입니다. 그렇게 많은 것은 아니지만 서버 (기계)는 LVM + Linux Software Raid Mirror 및 clamav를 사용한 바이러스 백신 검사에서 자체 파일 시스템 (C# 및 이후 C에서 퓨즈를 사용하여 개발 됨)을 통해 파일을 처리합니다. 소프트웨어는 가능한 한 가볍습니다!
편집 : 2GB RAM과 64 비트를 사용하는 Intel Core 2 Duo 2.66+ GHz (3 MB L2 - FSB 1066 MHz)가 될 것입니다.
모노는 epoll (libevent) 또는 kqueue (freebsd)를 사용합니까? 그리고 공연을 극대화하려고 뭔가 특별한 것을해야합니까? 데이터 패킷을받는 리소스를 죽이지 않기 위해 더 많은 것을 할 수 있습니까?
커뮤니티에 오신 것을 환영합니다. – JoshJordan