Библиотека создания клиент-серверных приложений для сценарного языка OneScript

31.07.23

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

Представленная библиотека позволяет создать многопоточный TCP сервер, к которому может одновременно подключиться множество TCP клиентов с удаленных компьютеров. Эти клиенты могут вызывать методы скриптов как на сервере, так и на других клиентах. Методы будут выполнены в контексте скрипта на удаленной машине. Возможна передача параметров в метод и получение результата. Для TCP клиента можно создать графический интерфейс с большим набором элементов управления, модальными диалоговыми окнами и с обработкой событий.

Предистория.

После написания библиотеки форм (OneScriptForms) и дизайнера форм (OneScriptFormsDesigner) возникла мысль о применении всего этого не ограничиваясь пределами одного компьютера. То есть пойти дальше в плане расширения функциональности и обеспечить сетевую работу библиотеки форм. Лучшим примером было бы создание чата. OneScript и некоторые библиотеки для него имеют возможность создавать потоковую передачу данных между сервером и клиентом. В моём случае их функционала было недостаточно, поэтому после поиска в сети и изучения материалов по клиент-серверным разработкам  написал собственную библиотеку OneScriptClientServer

Что мы имеем в итоге.

В итоге мы имеем возможность создать клиент-серверное приложение с использованием библиотеки форм для односкрипта и возможностью запуска на платформах Linux и Windows. Использование графического интерфейса не обязательно, всё зависит от поставленной задачи.
Есть два варианта использования библиотеки - в режиме приложения и в обычном режиме клиент-сервера.

Что позволяет режим приложения.

1.    Создать многопоточный TCP сервер (ПриложениеСервис). На стороне сервера для каждого клиента создается выделенный сокет, асинхронно работающий с клиентом.
2.    Создать TCP клиент (ПриложениеКлиент), который подключившись к серверу может вызывать на исполнение (в контексте скрипта сервера) его методы. При этом можно в метод передать параметры и получить результат выполнения метода.
3.    TCP клиент, подключившись к серверу может вызывать на исполнение (в контексте скрипта удаленной машины) методы другого TCP клиента, подключенного к этому же серверу. При этом так же можно в метод передать параметры и получить результат выполнения метода.

Что позволяет режим клиент-сервера.

1.    Подключение к серверу множества клиентов и обмен с ними сообщениями. Под сообщением подразумевается объект – экземпляр определенного класса. Отправляемые данные при этом предварительно обрабатываются. Можно отправлять такие типы данных как ДвоичныеДанные (для передачи файлов в том числе), Булево, Дата, Строка, Число.
2.    Подключение к серверу таких клиентов как браузер, или например объект TCPСоединение (TCPConnection) из библиотеки односкрипта. Данные такого клиента отправляются в коммуникационный поток без предварительной обработки.

Каждый вариант подразумевает использование разных классов клиента и сервера.  
При замерах на моем компьютере за одну секунду сервер подключил 1700 клиентов. В другом замере клиент успешно послал 15000 коротких текстовых сообщений за одну секунду. И клиент и сервер при замерах были запущены на одном и том же компьютере. Код замеров находится в справке к библиотеке.
Поддерживается обработка событий. Подключение/отключение к серверу, отправка/получение сообщения и другие события можно связать с методами скрипта и задать необходимый алгоритм поведения приложения.

Примеры кода.

Создаем и запускаем сервер.

Перем КС;

Процедура ПриложениеСервис_ПриПодключенииКлиента() Экспорт
	ПриложениеКлиентАрг = КС.АргументыСобытия;
	Сообщить("Подключен новый клиент. Идентификатор клиента = " + ПриложениеКлиентАрг.Клиент.ИдентификаторКлиента);
	Сообщить("ГуидКлиента = " + ПриложениеКлиентАрг.Клиент.ГуидКлиента);
КонецПроцедуры

ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\OneScriptClientServer.dll");
КС = Новый КлиентСерверДляОдноСкрипта();
ПриложениеСервис1 = КС.ПриложениеСервис(10085, ЭтотОбъект);
ПриложениеСервис1.ПриПодключенииКлиента = Новый Действие(ЭтотОбъект, "ПриложениеСервис_ПриПодключенииКлиента");

ПриложениеСервис1.Начать();

Пока КС.Продолжать Цикл
	КС.ПолучитьСобытие().Выполнить();
КонецЦикла;

Создаем и запускаем клиент.

Перем ПриложениеКлиент1;

Процедура ПриложениеКлиент1_ПриПодключении() Экспорт
	Сообщить("Я подключился. Гуид = " + ПриложениеКлиент1.ГуидКлиента);
КонецПроцедуры

ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\OneScriptClientServer.dll");
КС = Новый КлиентСерверДляОдноСкрипта();
ПриложениеКлиент1 = КС.ПриложениеКлиент(КС.TCPКонечнаяТочка("127.0.0.1", 10085), ЭтотОбъект);
ПриложениеКлиент1.ПриПодключении = Новый Действие(ЭтотОбъект, "ПриложениеКлиент1_ПриПодключении");
ПриложениеКлиент1.Подключить();

Пока КС.Продолжать Цикл
	КС.ПолучитьСобытие().Выполнить();
КонецЦикла;

Исходный код доступен на github (OneScriptClientServer). Там же найдете ссылку на документацию (Справка). Документация содержит подробные примеры.

Пример заготовки чата с использованием графического интерфейса (GUI): https://ahyahy.github.io/OneScriptClientServer/OSClientServerRu//OSClientServerExampleChat.html.

OneScript gui сервер клиент

См. также

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

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

15500 руб.

02.09.2020    184470    1027    403    

967

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

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

8400 руб.

20.08.2024    24576    164    85    

161

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    20371    52    19    

86

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

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

15000 руб.

10.11.2023    13703    57    33    

77

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    30599    105    48    

148

Работа с интерфейсом Анализ учета Мониторинг Платформа 1С v8.3 8.3.14 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Платные (руб)

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

9600 руб.

27.03.2025    790    3    5    

7

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

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    19122    7    32    

43
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kote 537 02.08.23 15:15 Сейчас в теме
Неплохо бы еще иметь нативную внешнюю компоненту
под разные ОС - для "встраивания" ВАШЕГО клиента в 1С,
Компонента, которая сможет взаимодействовать с Вашим сервером,
с поддержкой обработки сообщений на стороне 1С.
Получилось бы неплохое решение для асинхронного взаимодействия
процессов и фоновых заданий внутри 1С - без всяких там
сохранений в хранилище значений.
3. ahyahy 102 02.08.23 18:57 Сейчас в теме
(1)Практики написания внешних компонент у меня нет. Приглашаю всех желающих поучаствовать в развитии этой идеи или пообсуждать её. Пока в планах вернуться к доработке библиотеки форм, дизайнеру, нужно тестировать на новых версиях односкрипта, добавить новые классы.
2. kote 537 02.08.23 15:16 Сейчас в теме
4. Утюг 56 15.08.23 17:44 Сейчас в теме
Не совсем в тему вопрос. Хотел потестить новую библиотеку, но перед этим обновить OneScriptForms до последней (2.4.0.0) версии. Столкнулся с тем, что перестало работать свойство "Отображать" у колонки таблицы. Нижеприведенный код работает до версии 2.3.0.0 включительно:
//*************************************
КаталогБиблиотек = СтрЗаменить(КаталогПрограммы(),"bin","lib");
ФайлКомпоненты = КаталогБиблиотек+"\OneScriptForms.dll";
Файл = Новый Файл(ФайлКомпоненты);
Если НЕ Файл.Существует() Тогда
	ЗавершитьРаботу(0);
КонецЕсли;
	
ПодключитьВнешнююКомпоненту(ФайлКомпоненты);

Ф = Новый ФормыДляОдноСкрипта();
Форма1 = Ф.Форма();
Форма1.Текст = "Test";
Форма1.Ширина = 800;
Форма1.Высота = 820;
Форма1.Отображать = Истина;
Форма1.Показать();
Форма1.Активизировать();

ТаблицаДанных = Ф.ТаблицаДанных("ТД1");
Колонки = ТаблицаДанных.Колонки;
Колонка = Колонки.Добавить(Ф.КолонкаДанных("id", Ф.ТипДанных.Число));
Колонка = Колонки.Добавить(Ф.КолонкаДанных("cnt", Ф.ТипДанных.Число));

ТаблицаФормы = Ф.Таблица();
ТаблицаФормы.Ширина = 500;
ТаблицаФормы.Высота = 730;
ТаблицаФормы.Родитель = Форма1;
ТаблицаФормы.РежимАвтоРазмераКолонок = Ф.РежимАвтоРазмераКолонок.Заполнение;
ТаблицаФормы.ДобавлятьСтроки = Ложь;
ТаблицаФормы.ТолькоЧтение = Истина;
ТаблицаФормы.ИсточникДанных = ТаблицаДанных;

//Эта строка не работает в 2.4.0.0
ТаблицаФормы.Колонки(0).Отображать = Ложь;

Ф.ЗапуститьОбработкуСобытий();
Показать


В справке, в устаревших свойствах и методах, ничего по этому поводу нет.
5. ahyahy 102 16.08.23 18:58 Сейчас в теме
(4) Действительно. Спасибо за информацию об ошибке. Она возникает на версии 2.4.0.0 при задействовании свойства Таблица.ИсточникДанных (DataGridView.DataSource). Добавлял в таблицу возможность объединения ячеек и упустил работу с источником данных. Тестирование у меня составлено так, что не выявило данной ошибки. Учту. Решение в черновике я нашел и в ближайшие несколько дней будет новый исправленный релиз, нужно время всё протестировать и оформить.
6. Утюг 56 17.08.23 17:08 Сейчас в теме
(5)Спасибо. Если не сложно, маякните о выходе исправления (сюда или в личку).
7. ahyahy 102 19.08.23 11:52 Сейчас в теме
(6)Для OneScriptForms выпущен релиз 2.4.1.0. Исправлена работа таблицы при использовании свойства - Таблица.ИсточникДанных (DataGridView.DataSource)
8. Утюг 56 20.08.23 12:09 Сейчас в теме
Оставьте свое сообщение