Библиотека создания клиент-серверных приложений для сценарного языка OneScript.
Основой проекта послужила разработка автора Halil ibrahim Kalkan. Согласно документации на разработку (далее следует перевод) - клиенты смогут вызывать методы серверного приложения через интерфейс точно так же, как обычные вызовы методов в том же приложении. ... То есть должна получиться двусторонняя, ориентированная на подключение и асинхронная коммуникационная библиотека. После того, как клиент подключается к серверу, они смогут обмениваться данными ... асинхронно до тех пор, пока клиент или сервер не закроют соединение.
Что в итоге получилось при создании библиотеки.
Получилось два типа серверов и об этом подробнее читайте в справке.
Можно обмениваться сообщениями, содержащими текст, двоичные данные или базовые типы данных.
Клиент может подключившись к серверу вызывать методы скрипта сервера, и методы подключенных к этому серверу клиентов. В ответе клиент может получить какое либо значение базового типа данных, или двоичные данные. А это дает возможность написать приложение, состоящее из множества сценариев, запустить его на компьютере-сервере и подключаясь одновременно с компьютеров-клиентов по сети управлять работой сетевого приложения.
Практический пример вы можете посмотреть в справке.
Сервер многопоточный (каждый клиент в своем потоке живет), асинхронный (обработка клиентов происходит асинхронно).
Вот как это выглядит в коде.
Файл Сервер.os
Перем КС, ПриложениеСервис1;
Процедура МояПроцедураНаСервере() Экспорт
ВыполнитьНаСервереАрг = КС.ВыполнитьНаСервереАрг();
МассивПараметров = ВыполнитьНаСервереАрг.МассивПараметров;
Сумма = 0;
Для А = 0 По МассивПараметров.ВГраница() Цикл
Параметр = МассивПараметров.Получить(А);
Сообщить("Параметр " + А + " = " + Параметр);
// В нашем случае мы знаем, что тип значения параметров - Число.
Сумма = Сумма + Параметр;
КонецЦикла;
ПриложениеСервис1.Результат = "МояПроцедураНаСервере. Сумма = " + Сумма + " (время " + ТекущаяУниверсальнаяДатаВМиллисекундах() + ")";
Сообщить("Результат = " + ПриложениеСервис1.Результат);
Сообщить("================================");
КонецПроцедуры
ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptClientServer\OneScriptClientServer\bin\Debug\OneScriptClientServer.dll");
КС = Новый КлиентСерверДляОдноСкрипта();
ПриложениеСервис1 = КС.ПриложениеСервис(10085, ЭтотОбъект);
ПриложениеСервис1.Начать();
Сообщить("ПриложениеСервис запущен");
Пока КС.Продолжать Цикл
КС.ПолучитьСобытие().Выполнить();
КонецЦикла;
Файл Клиент.os
ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptClientServer\OneScriptClientServer\bin\Debug\OneScriptClientServer.dll");
КС = Новый КлиентСерверДляОдноСкрипта();
ПриложениеКлиент1 = КС.ПриложениеКлиент(КС.TCPКонечнаяТочка("127.0.0.1", 10085), ЭтотОбъект);
ПриложениеКлиент1.Подключить();
Приостановить(1000);
МассивПараметров = Новый Массив();
МассивПараметров.Добавить(125.35);
МассивПараметров.Добавить(25);
МассивПараметров.Добавить(75);
//// И другие типы значений.
// МассивПараметров.Добавить("строка25");
// МассивПараметров.Добавить(Ложь);
// МассивПараметров.Добавить(Дата(1984,03,26,06,24,21));
// ДД = Новый ДвоичныеДанные("C:\444\Pic\Games4.JPG");
// МассивПараметров.Добавить(ДД);
Если ПриложениеКлиент1.СостояниеСоединения = КС.СостояниеСоединения.Подключен Тогда
Сообщить("Результат = " + ПриложениеКлиент1.ВыполнитьНаСервере("МояПроцедураНаСервере", МассивПараметров));
КонецЕсли;
Пока КС.Продолжать Цикл
КС.ПолучитьСобытие().Выполнить();
КонецЦикла;
Для замера производительности на одном и том же компьютере были запущены сервер и клиент.
За одну секунду сервер подключил 1700 клиентов (экземпляров класса TCPКлиент(TcpClient)).
В другом замере клиент успешно послал 15000 коротких текстовых сообщений за одну секунду.
Размер пересылаемого сообщения в отдельных случаях ограничен 128 мегабайтами.
Взаимодействие с такими клиентами как браузер (клиентами, не являющимися экземплярами классов TCPКлиент(TcpClient) или СерверКлиент(ServerClient)) возможно с использованием свойства КлиентСерверДляОдноСкрипта.РежимСтороннегоКлиента (OneScriptClientServer.ThirdPartyClientMode). При этом производительность снизится. Подробнее об этом с примерами смотрите в документации.
На компьютере должен быть установлен OneScript. Тестирование проводил на OneScript версий 1.6.0 - 1.8.3. Скомпилированную библиотеку можно найти в каталоге docs этого проекта с именем OneScriptClientServerх_х_х_х.zip. Возможно будет необходимо правой кнопкой мыши вызвать свойства распакованного файла OneScriptClientServer.dll и разблокировать его. Создание сервера и клиента подробно приведено в примерах в разделе Документация
сайта библиотеки https://ahyahy.github.io/OneScriptClientServer/doc.html.