|
6 | 6 | > <https://ahyahy.github.io/OneScriptClientServer/index.html> |
7 | 7 | > |
8 | 8 |
|
9 | | -Можно обмениваться текстовыми сообщениями, сообщениями, содержащими двоичные данные или некоторые другие базовые типы данных. В дальнейшем планирую расширить возможности библиотеки до создания клиент-серверных приложений с использованием механизма удаленного вызова методов по протоколу TCP/IP. |
| 9 | +Основой проекта послужила [разработка автора Halil ibrahim Kalkan](https://www.codeproject.com/Articles/155282/TCP-Server-Client-Communication-Implementation). Согласно документации на разработку (далее следует перевод) - клиенты смогут вызывать методы серверного приложения через интерфейс точно так же, как обычные вызовы методов в том же приложении. ... То есть должна получиться двусторонняя, ориентированная на подключение и асинхронная коммуникационная библиотека. После того, как клиент подключается к серверу, они смогут обмениваться данными ... асинхронно до тех пор, пока клиент или сервер не закроют соединение. |
10 | 10 |
|
11 | | -Основой проекта послужила [разработка автора Halil ibrahim Kalkan](https://www.codeproject.com/Articles/155282/TCP-Server-Client-Communication-Implementation). Согласно документации на разработку (далее следует перевод) - клиенты смогут вызывать методы серверного приложения через интерфейс точно так же, как обычные вызовы методов в том же приложении. Серверное приложение также сможет вызывать клиентские методы таким же образом через интерфейс. То есть должна в итоге получиться двусторонняя, ориентированная на подключение и асинхронная коммуникационная библиотека. После того, как клиент подключается к серверу, они смогут обмениваться данными в обоих направлениях (сервер-клиенту или клиент-серверу) асинхронно до тех пор, пока клиент или сервер не закроют соединение. Это не просто обмен запросами/ответами, как в веб-сервисах. |
| 11 | +Что в итоге получилось при создании библиотеки. |
12 | 12 |
|
13 | | -Надеюсь удастся научить и мою библиотеку всё это выполнять, посмотрим. |
| 13 | +Можно обмениваться сообщениями, содержащими текст, двоичные данные или базовые типы данных. |
| 14 | +Клиент может подключившись к серверу вызывать методы скрипта, содержащего код сервера, и соответственно методы подключенного к этому скрипту других сценариев. В ответе сервера клиент может получить какое либо значение базового типа данных, или двоичные данные. А это дает возможность написать приложение, состоящее из множества сценариев, запустить его на компьютере-сервере и подключаясь одновременно с компьютеров-клиентов по сети управлять работой приложения. |
| 15 | +Сервер многопоточный (каждый клиент в своем потоке живет), асинхронный (обработка клиентов происходит асинхронно). |
| 16 | + |
| 17 | +Вот как это выглядит в коде. |
| 18 | + |
| 19 | +Файл Сервер.os |
| 20 | + |
| 21 | +```bsl |
| 22 | +Перем КС, ПриложениеСервис1; |
| 23 | +
|
| 24 | +Процедура МояПроцедураНаСервереСПараметрами(Параметр1, Параметр2, Параметр3) Экспорт |
| 25 | + ПриложениеСервис1.Результат = "Сумма параметров = " + (Параметр1 + Параметр2 + Параметр3) + " (" + ТекущаяУниверсальнаяДатаВМиллисекундах() + ")"; |
| 26 | +КонецПроцедуры |
| 27 | +
|
| 28 | +ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\OneScriptClientServer.dll"); |
| 29 | +КС = Новый КлиентСерверДляОдноСкрипта(); |
| 30 | +ПриложениеСервис1 = КС.ПриложениеСервис(10085, ЭтотОбъект); |
| 31 | +
|
| 32 | +// Запустим сервер |
| 33 | +ПриложениеСервис1.Начать(); |
| 34 | +Сообщить("ПриложениеСервис запущен"); |
| 35 | +
|
| 36 | +// Запустим цикл обработки событий |
| 37 | +Пока КС.Продолжать Цикл |
| 38 | + Попытка |
| 39 | + КС.ПолучитьСобытие().Выполнить(); |
| 40 | + Исключение |
| 41 | + КС.ВызватьМетод(ЭтотОбъект, КС.АргументыСобытия.ИмяМетода, КС.АргументыСобытия.МассивПараметров); |
| 42 | + КонецПопытки; |
| 43 | +КонецЦикла; |
| 44 | +``` |
| 45 | +Файл Клиент.os |
| 46 | + |
| 47 | +```bsl |
| 48 | +ПодключитьВнешнююКомпоненту("ВашКаталогНаДиске\OneScriptClientServer.dll"); |
| 49 | +КС = Новый КлиентСерверДляОдноСкрипта(); |
| 50 | +ПриложениеКлиент1 = КС.ПриложениеКлиент(КС.TCPКонечнаяТочка("127.0.0.1", 10085)); |
| 51 | +
|
| 52 | +ПриложениеКлиент1.Подключить(); |
| 53 | +
|
| 54 | +МассивПараметров = Новый Массив(); |
| 55 | +МассивПараметров.Добавить(125.35); |
| 56 | +МассивПараметров.Добавить(25); |
| 57 | +МассивПараметров.Добавить(75); |
| 58 | +
|
| 59 | +Если ПриложениеКлиент1.СостояниеСоединения = КС.СостояниеСоединения.Подключен Тогда |
| 60 | + Сообщить("Результат на клиенте = " + ПриложениеКлиент1.ВыполнитьНаСервере("МояПроцедураНаСервереСПараметрами", МассивПараметров)); |
| 61 | +КонецЕсли; |
| 62 | +
|
| 63 | +Приостановить(2000); |
| 64 | +ПриложениеКлиент1.Отключить(); |
| 65 | +``` |
14 | 66 |
|
15 | 67 | ### Замеры производительности |
16 | 68 |
|
|
0 commit comments