Skip to content

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

License

Notifications You must be signed in to change notification settings

ahyahy/OneScriptClientServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

21220df · Mar 26, 2025

History

76 Commits
Mar 14, 2024
Mar 26, 2025
Mar 14, 2024
Dec 10, 2022
Dec 10, 2022
Jan 2, 2024

Repository files navigation

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.

Resources

License

Stars

Watchers

Forks

Packages

No packages published