RRQMSocket은 통합된 초경량 네트워크 통신 서비스 프레임워크입니다. 높은 동시 연결, 높은 동시 처리, 이벤트 구독, 플러그인 확장, 멀티스레드 처리, 메모리 풀, 객체 풀 등의 특징을 갖고 있어 사용자가 보다 간단하고 빠르게 네트워크 프레임워크를 구축할 수 있습니다. 전송 효율 측면에서 동기 전송은 20w/s, 비동기 전송은 60w/s에 도달할 수 있습니다. 서버의 수신 및 처리 효율성은 스레드 수에 따라 달라집니다.
지원 환경:
.NET 프레임워크 4.5 이상.
.NETCore3.1 이상.
.NETStandard2.0 이상.
지원되는 프레임워크:
WPF
윈폼
블레이저
자마린
단핵증
단일성
기타(예: 모든 C# 시스템)
특징:
1. 개체 풀
개체 풀에는 RRQMSocket에 많은 응용 프로그램이 있으며, 가장 중요한 두 가지 응용 프로그램은 연결 개체 풀과 처리 개체 풀입니다. 연결 개체 풀은 클라이언트가 성공적으로 연결되면 먼저 연결 개체 풀에서 TcpSocketClient를 찾은 다음 존재하지 않는 경우 생성한다는 의미입니다. 클라이언트가 오프라인 상태가 되면 해당 TcpSocketClient가 재활용됩니다. 이것이 ID 재사용의 이유이다.
그리고 처리 객체 풀이 있는데, RRQMSocket에서는 데이터를 받는 스레드와 IOCP 커널 스레드가 분리되어 있습니다. 즉, 예를 들어 클라이언트가 10,000개의 데이터를 서버에 보내지만 서버는 데이터를 받은 후 매우 느리게 처리합니다. 그런 다음 기존의 iocp는 수신 속도를 확실히 늦춘 다음 클라이언트의 TCP 창에 정체가 발생했음을 알리고 클라이언트가 전송을 일시 중지하도록 합니다. 그러나 RRQMSocket에서는 수신된 모든 데이터가 대기열에 저장됩니다. 먼저 iocp 수신에 영향을 미치지 않습니다. 동시에 수신된 메시지 정보를 처리하기 위해 스레드가 할당됩니다. Lake"는 데이터 처리 능력을 크게 향상시킬 수 있습니다.
2. 멀티스레딩
처리 개체 풀이 존재하므로 멀티 스레드 처리가 간단해집니다. 클라이언트 연결이 완료되면 클라이언트 보조 클래스(TcpSocketClient)의 메시지 처리 논리 스레드가 자동으로 할당됩니다. 서버 스레드 수가 10개이면 첫 번째 연결된 클라이언트가 스레드 0에 할당되고 두 번째 Connections가 할당됩니다. 스레드 번호 1 등으로 순환 방식으로 할당됩니다. 클라이언트가 데이터를 수신하면 현재 스레드가 소유한 큐에 데이터를 대기시키고 실행을 위해 스레드를 깨웁니다.
3. 기존 IOCP 및 RRQMSocket
RRQMSocket의 IOCP도 기존의 IOC와 다릅니다. Microsoft의 공식 예를 들어 MemoryBuffer를 사용하여 메모리를 오픈한 후 균등하게 나눈 후 각 세션에 영역을 할당하여 데이터를 받습니다. 데이터를 다시 복사한 다음 데이터를 복사하는 처리입니다. RRQMSocket은 각 수신 전에 메모리 풀에서 사용 가능한 메모리 블록을 가져온 다음 이를 수신에 직접 사용합니다. 데이터를 수신한 후 메모리 블록을 직접 버려서 비록 작은 설계이지만 복사 작업을 방지합니다. 하지만 64kb 데이터를 1000w번 전송하면 성능이 10배 차이가 납니다. 따라서 이를 바탕으로 파일 전송의 효율성이 높아질 것입니다.
4. 데이터 처리 어댑터
다들 HPSocket, SuperSocket 등 다른 소켓 제품을 사용해 본 적이 있을 거라 생각해서 RRQMSocket의 디자인도 다른 제품의 뛰어난 디자인 컨셉을 차용했고, 데이터 처리 어댑터도 그 중 하나인데 기존의 소켓 제품과 다른 점은 무엇일까요? 다른 제품의 디자인은 RRQMSocket이 더 강력하다는 것입니다. 실제 데이터를 무시하고 원하는 데이터를 시뮬레이션할 수 있습니다. 예를 들어 데이터 패킷화 문제를 해결하기 위해 데이터를 전처리할 수 있습니다. 고정 패킷 문제를 해결하기 위해 HTTP 프로토콜을 직접 구문 분석하고 어댑터에서 처리한 후 HttpRequest 개체를 반환할 수도 있습니다.
5. 고정 패키지 및 하도급 솔루션
RRQMSocket에서 TCP 패킷 고착 및 하위 패킷 문제를 처리하는 것은 매우 간단합니다. 다른 데이터 처리 어댑터를 변경하면 됩니다. 예를 들어 고정 헤더를 사용하려면 TcpSocketClient 및 TcpClient에 FixHeaderDataHandlingAdapter 인스턴스를 할당하기만 하면 됩니다. 해당 프로세서에는 고정 길이, 종료 문자 분할 등도 있습니다.