RRQMSocket — это интегрированная сверхлегкая платформа сетевых служб связи. Он обладает характеристиками большого количества одновременных подключений, высокой одновременной обработки, подписки на события, подключаемых модулей, многопоточной обработки, пула памяти, пула объектов и т. д., что позволяет пользователям проще и быстрее создавать сетевую структуру. С точки зрения эффективности передачи, синхронная передача может достигать 20 Вт/с, а асинхронная передача — 60 Вт/с. Эффективность приема и обработки сервером зависит от количества потоков.
Среда поддержки:
.NET Framework 4.5 и выше.
.NETCore3.1 и выше.
.NETStandard2.0 и выше.
Поддерживаемые платформы:
WPF
Винформ
Блазор
Ксамарин
Мононуклеоз
Единство
Другие (т.е. все системы C#)
Функции:
1. Пул объектов
Пулы объектов имеют множество приложений в RRQMSocket, двумя наиболее важными из которых являются пул объектов соединения и пул объектов обработки. Пул объектов подключения означает, что при успешном подключении клиент сначала ищет TcpSocketClient в пуле объектов подключения, а затем создает его, если он не существует. Если клиент отключается от сети, его TcpSocketClient будет переработан. Это причина повторного использования идентификаторов.
Далее идет пул объектов обработки. В RRQMSocket поток, который получает данные, и поток ядра IOCP разделены. То есть, например, клиент отправляет на сервер 10 000 фрагментов данных, но сервер очень медленно их обрабатывает после получения. Тогда традиционный iocp определенно замедлит скорость приема, затем уведомит TCP-окно клиента о перегрузке, а затем позволит клиенту приостановить отправку. Однако в RRQMSocket все полученные данные будут храниться в очереди. Во-первых, это не повлияет на прием iocp. В то же время будут выделены потоки для обработки полученной информации сообщения. Это эквивалентно «флуд-разгрузке». Lake», что может значительно улучшить возможности обработки данных.
2. Многопоточность
Благодаря существованию пула объектов обработки многопоточная обработка становится простой. Когда клиентское соединение будет завершено, логический поток обработки сообщений клиентского вспомогательного класса (TcpSocketClient) будет автоматически назначен. Если количество серверных потоков равно 10, первый подключенный клиент будет назначен потоку 0, а второй Connections. быть назначен потоку № 1 и т. д. по кругу. Когда клиент получает данные, он помещает данные в очередь, принадлежащую текущему потоку, и пробуждает поток для выполнения.
3. Традиционный IOCP и RRQMSocket
IOCP RRQMSocket также отличается от традиционного. Если взять в качестве примера официальный пример Microsoft, MemoryBuffer используется для открытия памяти, а затем ее разделения поровну, а затем выделения области для каждого сеанса для получения данных. данные, сделайте еще одну копию, а затем скопируйте ее. Обработка выбрасывания данных. RRQMSocket берет доступный блок памяти из пула памяти перед каждым приемом, а затем использует его непосредственно для приема. После получения данных он напрямую выбрасывает блок памяти, избегая таким образом операции копирования, хотя это всего лишь небольшая конструкция. , но при передаче данных по 64кб 1000w раз производительность отличается в 10 раз. Следовательно, исходя из этого, эффективность передачи файлов будет высокой.
4. Адаптер обработки данных
Я считаю, что все использовали другие продукты Socket, такие как HPSocket, SuperSocket и т. д., поэтому дизайн RRQMSocket также основывался на превосходных концепциях дизайна других продуктов, и адаптер обработки данных является одним из них, но чем он отличается от Конструкция других продуктов заключается в том, что функция адаптера RRQMSocket является более мощной. Она может игнорировать реальные данные и моделировать нужные данные. Например, он может предварительно обрабатывать данные для решения проблемы пакетизации данных. Чтобы решить проблему липких пакетов, вы также можете напрямую проанализировать протокол HTTP и вернуть объект HttpRequest после обработки адаптером.
5. Липкие пакеты и субподрядные решения
С проблемами застревания TCP-пакетов и подпакетов в RRQMSocket очень просто справиться. Просто замените разные адаптеры обработки данных. Например: чтобы использовать фиксированные заголовки, вам нужно только назначить экземпляры FixedHeaderDataHandlingAdapter для TcpSocketClient и TcpClient. Соответствующий процессор также имеет фиксированную длину, сегментацию символов завершения и т. д.