Многопоточный TCP сервер с защищённым каналом для сценарного языка OneScript

12.01.26

Разработка - Инструментарий разработчика

Библиотека для создания многопоточного TCP-сервера, а так же TCP-клиента с поддержкой SSL/TLS шифрования для экосистемы OneScript. Удобный инструмент для построения распределенных систем, высоконагруженных сервисов, систем реального времени. С низким порогом вхождения и подробной документацией с примерами.

Сетевое взаимодействие компьютеров и программ нужно для обмена информацией, совместного использования ресурсов и удалённого управления устройствами. Применительно к 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 на отправку).
  • Оптимальное количество потоков для приёма из расчета от количества ядер процессора.
  • Обработка всех исключений: нет необработанных исключений.
  • Защита от утечек ресурсов. Очистка ресурсов и финализатор.

Пример использования

Создание защищенного клиента

// ...
ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\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 создаёт экосистему библиотек, фреймворков, учебных материалов и инструментов, что упрощает разработку и привлекает новых пользователей.

Данная работа добавляет в экосистему ещё одну библиотеку. Это решение для построения распределенных систем. Начинающим программистам поможет подробная справка с примерами на все свойства/методы/события.

Вступайте в нашу телеграмм-группу Инфостарт

OneScript 1script tcp server

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    55772    300    148    

276

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    237747    1286    419    

1104

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

15000 руб.

25.08.2025    34390    74    17    

87

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    33159    83    30    

108

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9500 руб.

17.05.2024    46594    161    63    

200

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    22659    82    42    

97

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36000 руб.

28.08.2025    4754    1    2    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Evil Beaver 8386 13.01.26 19:20 Сейчас в теме
Не хватает, конечно, примеров использования. Не очень понятно что это за зверь и с чем его едят.
2. ahyahy 137 13.01.26 20:44 Сейчас в теме
(1) В начале статьи я давал ссылку на мою предыдущую работу по части серверов. Но там получился весьма специфичный сервер. И главное, что меня не устраивало, это режим сеансов сервера. А именно клиентПодключился-серверОтветил-клиентОтключился. Хотелось держать клиента что называется "на линии". Вернее всех клиентов. А для манипулирования пересылаемыми данными выбрал БуферДвоичныхДанных - потому что очччень подходящий тип в односкрипте.
А насчет где использовать? ... Песенку вспомнил:

Точка, точка, запятая - Вышла рожица смешная.
Ручки, ножки, огуречик, - Появился человечек.
Что увидят эти точки? Что построят эти ручки?
Далеко ли эти ножки Уведут его?
Как он будет жить на свете,
Мы за это не в ответе,
Мы его нарисовали - Только и всего.

Надеюсь, кто нибудь, что нибудь сотворит дельное. А может этот зверь ЗВЕРЮГОЙ окажется.
Я сам уже давно не пишу приложения, только "инструменты". Только закончу один, уже другой в мыслях нарисовался. А чем ещё полезным на пенсии заниматься?
А, вот мне Алиса подсказывает. Чат-серверы и мессенджеры, многопользовательские игры, файловые серверы, сбор данных с датчиков, управление устройствами, мониторинговые системы, сервисы реального времени, микросервисы.
И, главное, это на языке 1С.
Конкретных примеров по каждому перечисленному не сделал. Жду помощи зала.

- Ну, а в мировом масштабе, Василий Иванович, совладаешь? — Нет, не сумею. Языков я не знаю.

В справке на все свойства-методы есть примеры, обычно я на этом останавливаюсь. Может позже простенький чатик сделаю.
Для отправки сообщения требуется регистрация/авторизация