oscript-library / OneScriptClientServer

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OneScriptClientServer

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

Подробнее можно узнать на этом сайте

https://ahyahy.github.io/OneScriptClientServer/index.html

Основой проекта послужила разработка автора 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.

About

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

License:Mozilla Public License 2.0


Languages

Language:1C Enterprise 59.3%Language:C# 40.7%