Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
Добрый день.

В Cache можно запускать программу с % в область %SYS
чтобы она могла работать и для остальных областей ?
(job^%RTName)
Например какой-то сокет на какой то порт.
Я пробовал, но почему-то работает только в той
области откуда была запущена.

Спасибо.
9 окт 18, 14:18    [21699300]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Valeriu,

Запускать можно из любой области, верно. А что значит работает только в той области откуда запущена?
А где ещё нужно чтобы работала, и как вы это проверяете?
9 окт 18, 14:48    [21699351]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
DAiMor,

Я бы хотел запускать ее в %sys на подобия сервиса,
один раз запустил и забыл.

Так в Каше работает VisM, MSM-Activate, etc.
Запускаются при старте системы.
Пользователь только переключается между областями ZNAMESPACE...
9 окт 18, 15:01    [21699364]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Valeriu
DAiMor,

Я бы хотел запускать ее в %sys на подобия сервиса,
один раз запустил и забыл.

Так в Каше работает VisM, MSM-Activate, etc.
Запускаются при старте системы.
Пользователь только переключается между областями ZNAMESPACE...
И это конечно возможно, можно через ZSTART запускать.
9 окт 18, 15:10    [21699375]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
Ее можно конечно смампировать для всех областей,
но интересен этот подход.
9 окт 18, 15:10    [21699376]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Valeriu,

% и так смаппирован на все области. Есть скрытый системный маппинг, там описано.

Все ещё не понятно, в чем проблема, что не работает?
9 окт 18, 15:12    [21699378]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
DAiMor
И это конечно возможно, можно через ZSTART запускать.

Понятно, я так и делаю. Но она только в %SYS и работает !
Как только переключаюсь в другую область, перестает отвечать на
программы что в этой области.
Думал может подход особый нужен для этого.
9 окт 18, 15:18    [21699382]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3776
Valeriu
Понятно, я так и делаю. Но она только в %SYS и работает !
Как только переключаюсь в другую область, перестает отвечать на
программы что в этой области
Не совсем понятно, что вы имели в виду, но да, если вы переключитесь на другую область, то программы из предыдущей перестанут быть видны. Объекты тоже перестанут работать, если они типов классов, которые в этой области не видны.
А как должно быть?
9 окт 18, 15:29    [21699404]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
Блок А.Н.,
В GT.M немного не так, там нету области как в Каше.
В Каше каждой области соответствуют какие то наборы программ и глобалов,
я так понимаю. Вот, когда я переключаюсь из %SYS в USER , программы из USER
не отвечают на мои запросы, хотя программа %RTName запущенная в %SYS
должна удовлетворять требованиям моим запросам уже в этой области ...
9 окт 18, 15:39    [21699419]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Valeriu,

Может вы используете какие то объекты, которые видны только в той области откуда запущена программа.
тогда могут быть проблемы, а так код спокойно может переключаться между областями, даже с открытыми объектами, если код классов этих объектов доступен в целевой области.

Какие ошибки у вас появляются?
9 окт 18, 16:00    [21699445]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
DAiMor,

Я с обьектами вообще не работаю.
Обычный М код + глобалы
Ошибок никаких пока не вижу.
Покопаюсь еще, может что-то сам неправильно делаю.
9 окт 18, 16:19    [21699463]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Valeriu
Как только переключаюсь в другую область, перестает отвечать на
программы что в этой области.
Если ошибок нет, то что значит перестает отвечать?
9 окт 18, 17:22    [21699525]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1172
Valeriu
Добрый день.

В Cache можно запускать программу с % в область %SYS
чтобы она могла работать и для остальных областей ?
(job^%RTName)
Например какой-то сокет на какой то порт.
Я пробовал, но почему-то работает только в той
области откуда была запущена.

Спасибо.


В доке на команду job указано
routine(routine-params):(process-params):timeout
видимо надо указывать
job^%RTName(передаваемые,параметры):("область где надо стартовать")
9 окт 18, 18:51    [21699624]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
ну я,
Считайте, что это TCP сервер, хотя так и есть.
Наподобие Вашего (interconect).
Он у Вас же общий для любой области. Запускается
из %SYS ???
+
%srv  ; Code based on the MiniM ^%srv protocol and ported to Cache
 w "Cache TCP server ^%srv.",!
 n port,dev
 s port=$g(^%SRV("port"),5001)
 s dev="|TCP|"_port 
 o dev::1 e  d  q
 . d log("Server ^%srv is already running.")
 c dev
 j sdmn::1 e  d  q
 . d log("Failed to run ^%srv server.")
 d log("Cache TCP server ^%srv has been run.")
 q
 ....
....

или я что то путаю ?
Если не прав поправьте.
9 окт 18, 19:24    [21699658]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
По моему нашел.
Моя функция, хотя вроде меняет область,
на самом деле я остаюсь по прежнему в %SYS ...
JS:
+
//**** Ajax Function ZNamespace Cache'
function ZN( zname ) {
      //var adrip = document.getElementById("ipnr").value
      var callback = function(req){
      var zncode = req.responseText;
      console.log(zncode);
      //document.getElementById('zn').innerHTML =  "Your work Namespace is: " + zncode;
      document.getElementById('znmsp').value = zncode
   };
    AJAX( "GET", "/cache/znamespace/user/" + zname, null, callback );
}


M:
+
ZN ;;Compilation tools WinBuilder company "ELTRANSSOFT" :[20.10.2016 07:51:09]
   ;; Copyright 2016, 2018 Valeriu Gontia
 s cmd=$p(%fcgi("i","header","DOCUMENT_URI"),"/",4)
 s nms=$p(%fcgi("i","header","DOCUMENT_URI"),"/",5) 
 s ^goncmd($h)=cmd
 i cmd="webZV" d ZVersion q
 i cmd="user" d cmdZN(nms) q
 ;;
cmdZN(input)
 ;;
 n $es n $et s $et="g:'$es errXE"
 ZNSPACE input
 s %fcgi("o","stdout")=$ZNSPACE_$c(13,10)
 s %fcgi("o","header","Content-Type")="text/plain"
 q
 ;;  
errXE
 s err=$ze,$ec="" 
 s ^errXE($h)=err
 q
 ;; 

Хотя в консоле явно получаю не область %SYS ..
9 окт 18, 20:06    [21699694]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1172
Valeriu
ну я,
Считайте, что это TCP сервер, хотя так и есть.
Наподобие Вашего (interconect).
Он у Вас же общий для любой области. Запускается
из %SYS ???
+
%srv  ; Code based on the MiniM ^%srv protocol and ported to Cache
 w "Cache TCP server ^%srv.",!
 n port,dev
 s port=$g(^%SRV("port"),5001)
 s dev="|TCP|"_port 
 o dev::1 e  d  q
 . d log("Server ^%srv is already running.")
 c dev
 j sdmn::1 e  d  q
 . d log("Failed to run ^%srv server.")
 d log("Cache TCP server ^%srv has been run.")
 q
 ....
....

или я что то путаю ?
Если не прав поправьте.


Там область с клиента прилетает. Примерно так:

Open(server,port,database)
n saveio,dev,connect,answ
s saveio=$io
s dev="|TCP|"_port
i $$devopened(dev) q 0
o dev:(server:port:"S"):1 e d q 0
. s %cli(0,"err")="Failed to connect to "_server_":"_port
s connect=$i(%cli)
s %cli(connect,"dev")=dev
u dev:(:::$c(10)) w *-3 r answ:10
i answ=("<OK>:"_$c(0)) d u saveio q connect
. s answ=$$Read(connect,"$zv")
. i answ["MiniM" d Execute(connect,"zn """_database_"""")
. i answ["Cache" d Execute(connect,"d $zu(5,"""_database_""")")
u saveio c dev
s %cli(connect,"err")=answ
s %cli(0,"err")="Failed to connect to "_server_":"_port
q 0
Это код для Cache, клиентская часть MiniM Interconnect

Для разных М серверов выбрал делать по-разному, мне так показалось проще сделать стабильный работающий вариант.

Для Cache команда znspace одно время не на всех версиях работала корректно с переключением из несистемной в системную, но точно деталей уже не припоминаю (как и положено старожилам ;)))).

А для GT.M такого понятия вроде как совсем не нашел, там отдельно существуют каталог программ и каталог глобалов, устройство настроек сложное, я решил оставить это админам и программистам, пусть сами вызовут нужные переключения.
9 окт 18, 20:49    [21699709]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Valeriu
Моя функция, хотя вроде меняет область,
на самом деле я остаюсь по прежнему в %SYS ...

т.е. вы делаете через асинхронный вызов переход в другую область, а со следующим вызовом оказывается что вы не там?
Я не знаю, как у вас реализован процесс для сессии, в которой происходит обработка комманд.
Может у вас обработчик запросов остался в той области и не перешел, может у вас новый процесс создается под каждый запрос.

А еще очень вероятно, где то может стоять new без аргументный, который все возвращает. команда new в Cache работает и для переменной $namespace которая меняется при переходе в другую область, и соответвенно при выходе вернет область обратно автоматически.
9 окт 18, 21:37    [21699772]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2036
DAiMor,

Я тоже подозреваю одну из этих причин...
С ВЕБ-ом я не так давно работаю и видимо
не все нюансы учел.
Может действительно, при каждом запросе создается
новый процесс, во всяком случае, JOB-ы разные.
Тогда как это можно побороть ?
10 окт 18, 07:43    [21700025]     Ответить | Цитировать Сообщить модератору
 Re: Программа с %  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2593
Valeriu,

В качестве решения можно запоминать где-то область. И переходить в нее при каждом выполнении запроса.
10 окт 18, 08:12    [21700036]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить