Сетевое взаимодействие компьютеров и программ нужно для обмена информацией, совместного использования ресурсов и удалённого управления устройствами. Применительно к OneScript первые два пункта наиболее значимы. В предыдущей работе (Библиотека создания клиент-серверных приложений для сценарного языка OneScript) автор описывал организацию сетевого взаимодействия. Но действительность так многообразна в своих проявлениях, что не всегда можно найти подходящее к ситуации решение. Представляемая библиотека быть может закроет ещё ряд задач в экосистеме OneScript.
Ставились следующие задачи
- Создать кроссплатформенный многопоточный TCP сервер для OneScript.
- Создать TCP клиент для OneScript.
- Сервер должен держать открытым соединение с клиентами до момента, пока или клиент, или сервер не разорвут соединение.
- Количество одновременных подключений обрабатываемых без ощутимых задержек должно быть не менее 1500.
- Обеспечить не блокирующий сценарий запуск как сервера, так и клиента.
- Обеспечить обработку событий сервера и клиента в коде OneScript.
- Предусмотреть возможность как массовой рассылки сообщений всем подключенным клиентам, так и отправки сообщения отдельным клиентам по выбору.
- Простая работа с пересылаемыми данными.
- Данные должны быть защищены криптографическим протоколом TLS (Transport Layer Security).
Ситуации для применения
- Защищённый обмен данными между 1Script-приложениями.
- Централизованный агрегатор данных с удалённых клиентов (например, терминалы).
- Основа для написания кастомных протоколов поверх TCP + SSL.
- Тестирование сетевой нагрузки.
- Интеграция с внешними сервисами (например, приём данных от IoT устройств).
- Чат-сервера, микросервисы, мониторинг систем, системы уведомлений.
- Сервер для сетевых игр. Скорее всего для пробующих себя в программировании. Порог вхождения для OneScript минимален.
Ключевые возможности библиотеки
- Многопоточная обработка подключений.
- Поддержка SSL/TLS (аутентификация сервера, защищённый канал).
- Гибкая настройка: порт, лимиты подключений, размер сообщений.
- Параллельное управление 1500+ клиентами без снижения производительности.
- Механизм для отслеживания активности клиентов.
- Мягкое завершение работы сервера с уведомлением клиентов.
- Отправка данных избирательно клиенту или широковещательно всем.
- Событийная модель удобная для интеграции с OneScript (подключение, отключение, получение данных, ошибки).
- Удобный интерфейс для OneScript-разработчиков.
- Установка кодировки по выбору для отправляемого сообщения.
- Подключение к серверу разнородных клиентов. Автор рекомендует использовать клиента из состава библиотеки.
- Встроенные методы для генерации самоподписанного сертификата. Экспорт публичной части .crt из .pfx.
- Справка содержит пример защищенного ввода пароля для сертификата.
- Совместимость с Linux через Mono.
Что под капотом
- Потоки и асинхронность для масштабируемости.
- Состояния сервера для контроля.
- Пул буферов для приёма соединений и эффективного управления памятью.
- Конкурентные коллекции для потокобезопасной работы с клиентами.
- Изменяемые лимиты на количество подключений (1500 по умолчанию) и максимальный размер сообщения (128 MB по умолчанию).
- Для устойчивости таймауты на отправку и получение сообщений (30s на прием, 10s на отправку).
- Оптимальное количество потоков для приёма из расчета от количества ядер процессора.
- Обработка всех исключений: нет необработанных исключений.
- Защита от утечек ресурсов. Очистка ресурсов и финализатор.
Пример использования
- Защищённый обмен данными между 1Script-приложениями.
- Централизованный агрегатор данных с удалённых клиентов (например, терминалы).
- Основа для написания кастомных протоколов поверх TCP + SSL.
- Тестирование сетевой нагрузки.
- Интеграция с внешними сервисами (например, приём данных от IoT устройств).
- Чат-сервера, микросервисы, мониторинг систем, системы уведомлений.
- Сервер для сетевых игр. Скорее всего для пробующих себя в программировании. Порог вхождения для OneScript минимален.
Ключевые возможности библиотеки
- Многопоточная обработка подключений.
- Поддержка SSL/TLS (аутентификация сервера, защищённый канал).
- Гибкая настройка: порт, лимиты подключений, размер сообщений.
- Параллельное управление 1500+ клиентами без снижения производительности.
- Механизм для отслеживания активности клиентов.
- Мягкое завершение работы сервера с уведомлением клиентов.
- Отправка данных избирательно клиенту или широковещательно всем.
- Событийная модель удобная для интеграции с OneScript (подключение, отключение, получение данных, ошибки).
- Удобный интерфейс для OneScript-разработчиков.
- Установка кодировки по выбору для отправляемого сообщения.
- Подключение к серверу разнородных клиентов. Автор рекомендует использовать клиента из состава библиотеки.
- Встроенные методы для генерации самоподписанного сертификата. Экспорт публичной части .crt из .pfx.
- Справка содержит пример защищенного ввода пароля для сертификата.
- Совместимость с Linux через Mono.
Что под капотом
- Потоки и асинхронность для масштабируемости.
- Состояния сервера для контроля.
- Пул буферов для приёма соединений и эффективного управления памятью.
- Конкурентные коллекции для потокобезопасной работы с клиентами.
- Изменяемые лимиты на количество подключений (1500 по умолчанию) и максимальный размер сообщения (128 MB по умолчанию).
- Для устойчивости таймауты на отправку и получение сообщений (30s на прием, 10s на отправку).
- Оптимальное количество потоков для приёма из расчета от количества ядер процессора.
- Обработка всех исключений: нет необработанных исключений.
- Защита от утечек ресурсов. Очистка ресурсов и финализатор.
Пример использования
- Потоки и асинхронность для масштабируемости.
- Состояния сервера для контроля.
- Пул буферов для приёма соединений и эффективного управления памятью.
- Конкурентные коллекции для потокобезопасной работы с клиентами.
- Изменяемые лимиты на количество подключений (1500 по умолчанию) и максимальный размер сообщения (128 MB по умолчанию).
- Для устойчивости таймауты на отправку и получение сообщений (30s на прием, 10s на отправку).
- Оптимальное количество потоков для приёма из расчета от количества ядер процессора.
- Обработка всех исключений: нет необработанных исключений.
- Защита от утечек ресурсов. Очистка ресурсов и финализатор.
Пример использования
Создание защищенного клиента
// ...
ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\MultithreadedTCPServer.dll");
МС = Новый МногопоточныйTCPСерверДляОдноСкрипта();
ТекПуть = Новый Файл(ТекущийСценарий().Источник).Путь;
Клиент = МС.ФоновыйTCPКлиентSSL("127.0.0.1", 8080, ОбъединитьПути(ТекПуть, "certificate.crt"));
// ...
Уникальные особенности
- Гибридность. Сочетание возможностей и инструментария C# с удобством и инструментарием OneScript.
- Легкая интеграция. Не требует изменения существующих OneScript-скриптов. В справке приведены несколько вариантов не блокирующих сценарий запуска как сервера, так и клиента. Значит можно будет встраивать работу сервера или клиента в существующие решения OneScript с минимальными затратами.
- Контроль формата сообщения. Получаемые и передаваемые данные приведены к типу БуферДвоичныхДанных (BinaryDataBuffer). Этот тип позволяет легко манипулировать байт данными, вставлять информацию о длине передаваемого отдельного сообщения, типе данных в сообщении. Значит можно поверх TCP + SSL добавить свой протокол общения с сервером прямо в коде сценария.
- Несложная работа с сертификатами. Библиотека предоставляет методы создания файлов самоподписанного сертифика.
Тестирование
Проведены тесты утилитой EchoServerTest.exe.
Результаты первых четырех запусков после старта сервера:
C:\444>C:\EchoServerTest\EchoServerTest -server 127.000.000.001 -port 8080 -connections 1000 -hold
Creating 1000 connections
All connections in progress
All connections complete in 1129ms
1000 established. 0 failed.
Test Passed
C:\444>C:\EchoServerTest\EchoServerTest -server 127.000.000.001 -port 8080 -connections 1000 -hold
Creating 1000 connections
All connections in progress
All connections complete in 672ms
1000 established. 0 failed.
Test Passed
C:\444>C:\EchoServerTest\EchoServerTest -server 127.000.000.001 -port 8080 -connections 1000 -hold
Creating 1000 connections
All connections in progress
All connections complete in 357ms
1000 established. 0 failed.
Test Passed
C:\444>C:\EchoServerTest\EchoServerTest -server 127.000.000.001 -port 8080 -connections 1000 -hold
Creating 1000 connections
All connections in progress
All connections complete in 419ms
1000 established. 0 failed.
Test Passed
Ссылки
Исходный код доступен на github (Многопоточный TCP сервер для сценарного языка OneScript).
Полная документация через свойства и методы здесь (Справка), с примерами использования в коде.
Заключение
Обширное сообщество OneScript создаёт экосистему библиотек, фреймворков, учебных материалов и инструментов, что упрощает разработку и привлекает новых пользователей.
Данная работа добавляет в экосистему ещё одну библиотеку. Это решение для построения распределенных систем. Начинающим программистам поможет подробная справка с примерами на все свойства/методы/события.
Вступайте в нашу телеграмм-группу Инфостарт
