Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: [gtm] Ajax + WEB  [new]
andrew000999
Member

Откуда:
Сообщений: 83
Валерий, не проще ли вместо игры с $zglb
обращаться к разным областям по полной глобалной ссыле
25 янв 17, 22:25    [20146872]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

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

Была и эта мысль, к глобалам без проблем, а как насчет рутин ?
25 янв 17, 22:38    [20146921]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 1942
Короче здесь так получается.
Пользователь открыл сокет, получил данные и СРАЗУ же закрыл
Второй, или тот кто по очереди естественно опять открывает и закрывает.
Т.е. если пользователь перешел в другую область (глобальный каталог,рутин)
он перебрасывает сюда и предыдущих без их ведома.
Получается как бы ОДНО ПОЛЬЗОВАТЕЛЬСКОЕ приложение..
Конечно хочется не так, а неограниченное количество независимых соединений.
+ Вот код работы сокета:
%FCGI ;;New Routine created and compiled tools "WEB-MEditor for GT.M" :[27.10.2016 16:16:43]
      ;; Written by Winfried Bantel
      ;; Published under Gnu Public License
START ;
    
$zt s $zt="do errhalt^%FCGI"
    ;s $zt="do Error^%FCGI"
    ;S TCPPORT=$S($G(^FCGI("port"))>0:^("port"),1:9999),TCPIO="|TCP|"_TCPPORT
    
TCPPORT=9999,TCPIO="|TCP|"_TCPPORT
    
nr=0
    
0:(nowrap)
    
apiInit("listener",TCPPORT)
OPEN "opening..."_TCPIO,!
    
(TCPIO,TCPPORT,nr)
    
OPEN TCPIO:(ZLISTEN=TCPPORT_":TCP":DELIMITER="":ATTACH="listener":NOWRAP):0:"SOCKET" ;; Bantel
    
"opened",!
    
TCPIO WRITE /LISTEN(0)
LOOP    ;
    
"Waiting....",! TCPIO /WAIT(10) k=$KEY i k'["CONNECT" LOOP
    
k,!
LOOP2    TCPIO
    
*version,*type,*requestIdB1,*requestIdB0 requestId=256*requestIdB1+requestIdB0
    
*contentLengthB1,*contentLengthB0,*paddingLength,*reserved
    
contentLength=256*contentLengthB1+contentLengthB0
    
contentData="" contentLength contentData#contentLength
    
paddingData="" paddingLength paddingData#paddingLength
    
!,"Type ",type," RequestId=",requestId," l=",$L(contentData),!
    
type=1 nr=nr+1 d  g LOOP2
    
i=1:1:contentLength " ",$A(contentData,i)
    . 
!
    
type=4 %fcgi("i","params")=$G(%fcgi("i","params"))_contentData d:'contentLength  LOOP2
    
pos=1 f  q:pos>$L(%fcgi("i","params"))  do
    
. . l1=$A(%fcgi("i","params"),pos),l2=$A(%fcgi("i","params"),pos+1)
    . . 
%fcgi("i","header",$E(%fcgi("i","params"),pos+2,pos+2+l1-1))=$E(%fcgi("i","params"),pos+2+l1,pos+2+l1+l2-1)
    . . 
pos=pos+l1+l2+2
    . 
%fcgi("i","params")
    
type=5 "Lenght: ",contentLength,!,contentData,! contentLength>0 %fcgi("i","stdin")=$G(%fcgi("i","stdin"))_contentData LOOP2
    
; Jetzt sind alle Daten da
    ;
    
%fcgi("o","header","Set-Cookie")="SID="_$S($G(%fcgi("i","header","SID"))="":($P($H,",")_"00000"+$P($H,",",2))_nr_",1",1:$P(%fcgi("i","header","SID"),",")_","_($P(%fcgi("i","header","SID"),",",2)+1))
     
; ******* SID and Job ????
    
sid=$p($p(%fcgi("o","header","Set-Cookie"),"SID=",2),",",1)
    
^fcgilog(sid,"SID")=TCPPORT_"`"_$j
    s 
^fcgilog("SID")=sid
    
i $G(%fcgi("i","header","HTTP_CONTENT_TYPE"))="application/x-www-form-urlencoded" HTMLVARDECODE(%fcgi("i","stdin"),"%fcgi(""i"",""_POST""")
    
%fcgi("i","header","QUERY_STRING")'="" HTMLVARDECODE(%fcgi("i","header","QUERY_STRING"),"%fcgi(""i"",""_GET""")
    
;w !,"###############",! zwr %fcgi w !,"###############",!
    ;w $P(%fcgi("i","header","DOCUMENT_URI"),"/",3)
    ; Jetzt auf Programme verteilen
    
t=$G(^FCGI("DOCUMENT_URI",$P(%fcgi("i","header","DOCUMENT_URI"),"/",1,3)))
    
"branch to ",t,!
    
d:t'="" @w:t="" "^FCGI(""DOCUMENT_URI"","""_$P(%fcgi("i","header","DOCUMENT_URI"),"/",1,3)_""") not found",!
    
;
    
!,"###############",! zwr %fcgi !,"###############",!
    
(ind,txt)="" f  s ind=$O(%fcgi("o","header",ind)) q:ind=""  txt=txt_ind_": "_%fcgi("o","header",ind)_$C(13,10)
    
txt=txt_$C(13,10)
    
TCPIO
    
w $C(1,6,requestIdB1,requestIdB0,$L(txt)\256,$L(txt)#256,0,0),txt
    
i $G(%fcgi("o","stdout"))'="" w $C(1,6,requestIdB1,requestIdB0,$L(%fcgi("o","stdout"))\256,$L(%fcgi("o","stdout"))#256,0,0),%fcgi("o","stdout")
    
w $C(1,6,requestIdB1,requestIdB0,0,0,0,0) ; stdout Complete
    
w $C(1,3,requestIdB1,requestIdB0,0,8,0,0),$C(0,0,0,0,0,0,0,0) ; Request Complete
    
TCPIO OPEN
    
;
record(type,data)   ; Not used
    
w $C(1,type,requestIdB1,requestIdB0,$L(data)\256,$L(data)#256,0,0)_data
    
q
    
;
init    ;  Not used
    
(fcgi)
    
fcgi("type",1,"FCGI_BEGIN_REQUEST")=1
    
fcgi("type",1,"FCGI_ABORT_REQUEST")=2
    
fcgi("type",1,"FCGI_END_REQUEST")=3
    
fcgi("type",1,"FCGI_PARAMS")=4
    
fcgi("type",1,"FCGI_STDIN")=5
    
fcgi("type",1,"FCGI_STDOUT")=6
    
fcgi("type",1,"FCGI_STDERR")=7
    
fcgi("type",1,"FCGI_DATA")=8
    
fcgi("type",1,"FCGI_GET_VALUES")=9
    
fcgi("type",1,"FCGI_GET_VALUES_RESULT")=10
    
fcgi("type",1,"FCGI_UNKNOWN_TYPE")=0
    
;
HTTPSTATUS401(realm)
    
%fcgi("o","header","Status")="401 Unauthorized" ;
    
%fcgi("o","header","WWW-Authenticate")="Basic realm="""_realm_"""" ;
    
%fcgi("o","header","Content-Type")="text/plain",%fcgi("o","stdout")="Unauthorized"
    
q
    
;
HTMLVARDECODE(data,var)  ; Decodiert nach HTML-Variablen-Standard
    
data,!,var,!
    
l,i,ind,val,t
    
l=$L(data,"&"i=1:1:t=$P(data,"&",id
    
;s ind=$$CONVERT($TR($P(t,"="),lower,upper)),val=$$CONVERT($P(t,"=",2))
    
ind=$$CONVERT($P(t,"=")),val=$$CONVERT($P(t,"=",2))
    . 
i $L(ind@(var_","""_ind_""")")=val ind,": ",val,!
    
q
    
;
HEX2DEZ(dez)  ;
    
(dezhex=0,dez=$TR(dez,"abcdef","ABCDEF")
    
i=1:1:$L(dezhex=hex*16+$s($A(dez,i)>59:$A(dez,i)-55,1:$E(dez,i))
    
hex
    
;
CONVERT(t)  ;
    
(t)
    
t=$TR(t,"+"," "),p=0
    
f  s p=$F(t,"%",pq:p<1  t=$E(t,1,p-2)_$C($$HEX2DEZ($E(t,p,p+1)))_$E(t,p+2,255)
    
t
    
;
out(txt) ;
 
%fcgi("o","stdout")=%fcgi("o","stdout")_txt
 
q
 
;; 
apiInit(server,port)
 
^fcgilog(server,"FCGISERVER")=port_"`"_$j
 q    
 

Error
 
s $zt=""
 
%fcgi("o","stdout")=%fcgi("o","stdout")_" <script type=""text/javascript"">"_$c(10)
    
s $et="",$ec="",$zt=""
    
output=$zs
    s $zs
=0
 
%fcgi("o","stdout")=%fcgi("o","stdout")_" alert ("""_output_""")"_$c(10)
 
%fcgi("o","stdout")=%fcgi("o","stdout")_" </script>"_$c(10)
 
;d out(%fcgi("o","stdout"))
 ;c TCPIO g START
 
q
 
;;
errhalt()
 
;;The error handler to stop. You can see the error in the file and that happened.
 ;;
 
set $ztrap="errhalt"
 
new file,dev
 
set dev=$io
 set 
file="/usr/errsocket.log"
 
open file:(append:nofixed:wrap:noreadonly:chset="M")
 
use file
 
write "Error at "_$horolog,!,$zstatus,!
 
zshow "SIDV"
 
close file
 
use dev
 
halt
 q
 
;;
Буду благодарен за любую подсказку, как можно подправить работу сокета
Я пробовал разные варианты, но вопрос так и остался.
Может я что-то неправильно делаю ?
26 янв 17, 09:17    [20147651]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu,
Работу этого сервера можно не менять.

Он работает в определённом контексте ($zg,$zro), который "отработчики" конкретных запросов должны по выходу восстанавливать. Вот участок кода, где происходит косвенный вызов "отработчика"
    t=$G(^FCGI("DOCUMENT_URI",$P(%fcgi("i","header","DOCUMENT_URI"),"/",1,3)))
    
"branch to ",t,!
    
d:t'="" @w:t="" "^FCGI(""DOCUMENT_URI"","""_$P(%fcgi("i","header","DOCUMENT_URI"),"/",1,3)_""") not found",!
А вот то, что вызывается по @t, должно:

1. сохранить текущее значение $zg и $zro
2. Установить нужное значение $zg и $zro
3. Выполнить нужный код
4. Восстановить сохранённое в п.1 и выйти
26 янв 17, 10:46    [20148015]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
В дополнении к вышесказанному.
Конечно, по-правильному, все эти пункты лучше вставить в сам FCGI.m, чтобы не дублировать во многих местах.
Добавить процедурку в FCGI.m, типа такой:
startappl(appl)
 
(appl,%fcgi)  ;здесь может что ещё нужно вставить, что надо 
 ;сохранить $zg и , если надо $zro
 ;установить нужные $zg, $zro (здесь как раз cid и может пригодиться)
 ;настроить обработчик ошибок, если нужно
 
@appl
 
;восстановить $zg,$zro
 
q
а в основном коде FCGI заменить
d:t'="" @t
на
d:t'="" startappl(t)
26 янв 17, 14:40    [20149404]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 1942
gluconat_ca,
Спасибо большое.
Что-то зашевелилось с таким подходом.
Да. Приходится менять везде...
+
FCGIUCI ;;New Routine created and compiled tools "WEB-MEditor for GT.M" :[29.11.2016 09:05:42]
 
nms=$P(%fcgi("i","header","DOCUMENT_URI"),"/",4)
 
dir=$P(%fcgi("i","header","DOCUMENT_URI"),"/*",2)
 
s:nms=1 nms="SYS"
 
n=0
 
%fcgi("i","header","REQUEST_METHOD")="GET" GET(dir,nmsq
 
;;
GET(SYSGLB,namespace)
 
; SYSGLB - system path(^sysconfig $gtm_dist)
 ; namespace - (cadre - by example)
 
id=""
 
sid=$p(%fcgi("i","header","SID"),",")
 
^uciID(sid)=""
 
^uciID(sid,"oldzro")=$zro
 
^uciID(sid,"oldzgb")=$zgb
 
f  s id=$o(^uciID(id)) q:id=""  d
 
dirrtn=^|SYSGLB|sysconfig(namespace,"r"; return directory(r) to call routines
 
GLD=^|SYSGLB|sysconfig(namespace,"gld")
 . 
PATH=^|SYSGLB|sysconfig(namespace,"patch")
 . 
id=sid d
 
. . ^uciID(sid,"newzro")=PATH
 
. . ^uciID(sid,"newzgb")=GLD
 
. . %fcgi("o","stdout")=dirrtn_$c(13,10)
 . . 
%fcgi("o","header","Content-Type")="text/plain"
 
q
 
;;
Счс обдумаю как Вы предлагаете.
26 янв 17, 15:04    [20149560]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu,

А зачем в цикле перебирать:

f  id=$o(^uciID(id)) q:id=""  d
 
dirrtn=^|SYSGLB|sysconfig(namespace,"r"; return directory(r) to call routines
 
GLD=^|SYSGLB|sysconfig(namespace,"gld")
 . 
PATH=^|SYSGLB|sysconfig(namespace,"patch")
 . 
id=sid d

Если можно сразу:

 d:$d(^uciID(cid))
 . 
dirrtn=^|SYSGLB|sysconfig(namespace,"r"; return directory(r) to call routines
 
GLD=^|SYSGLB|sysconfig(namespace,"gld")
 . 
PATH=^|SYSGLB|sysconfig(namespace,"patch")
26 янв 17, 16:08    [20150012]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
В продолжении.

и это лишнее
d:$d(^uciID(cid))
так как чуть выше есть
^uciID(cid)=""
, так что узел заведомо есть.
26 янв 17, 16:53    [20150319]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 1942
gluconat_ca,
Придется писать маленький бат-ник все таки ..
Где указать системную директорию (gtm_dist)
У меня например /usr/gtm63A/mumps.gld
+
startappl(appl)
 
(appl,%fcgi)  ;здесь может что ещё нужно вставить, что надо 
 ;сохранить $zg и , если надо $zro
 ;установить нужные $zg, $zro (здесь как раз cid и может пригодиться)
 ;настроить обработчик ошибок, если нужно
 
sid=$p(%fcgi("i","header","SID"),",")
 
'$d(^|"/usr/gtm63A/mumps.gld"|uciID(sid,"newzro")) ^|"/usr/gtm63A/mumps.gld"|uciID(sid,"newzro")=$zro
 
'$d(^|"/usr/gtm63A/mumps.gld"|uciID(sid,"newzgb")) ^|"/usr/gtm63A/mumps.gld"|uciID(sid,"newzgb")=$zgb
 
$zro=^|"/usr/gtm63A/mumps.gld"|uciID(sid,"newzro")
 
$zgb=^|"/usr/gtm63A/mumps.gld"|uciID(sid,"newzgb")
 
@appl
 
;восстановить $zg,$zro
 
$zro=^|"/usr/gtm63A/mumps.gld"|uciID(sid,"oldzro")
 
$zgb=^|"/usr/gtm63A/mumps.gld"|uciID(sid,"oldzgb")
 
q
 
;
26 янв 17, 17:13    [20150402]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu,

Сохранять текущие $zg,$zro можно же и в локальных переменных, я собственно и имел это ввиду.
26 янв 17, 17:23    [20150469]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 1942
gluconat_ca,
Да, сам заметил что в глобал не самый хороший вариант..
Очень трудно отследить всех пользователей кто куда и что выбирает.
Уже пробовал - началась путаница..
Но FCGI еще не знает $zg,$zro ни новые не старые значения !!!
Я не знаю где брать локальные переменные - а было бы хорошо..
Потом уже.
Когда пользователь нажимает на "область", я должен это фиксировать
плюс, должен знать постоянно где находится дистрибутив.
может что-то путаю, уже конец рабочего.
26 янв 17, 17:41    [20150519]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu,
честно говоря я в некотором замешательстве.
Не могу взять в толк, в чём проблемы, особенно с локальными переменными. Просто тупо пишем:
zg=$zg
zro=$zro
...
$zg=zg
$zro=zro
сорри, но, похоже особо ничего добавить в ближайшее время уже не смогу.
26 янв 17, 18:44    [20150811]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 1942
gluconat_ca,
Да.. Вот что значит старые привычки.
Я никак не могу отходит от старых понятий работ М систем.
Поплыл я далеко и совсем не туда. Прошу прощения. Видимо здесь гораздо даже проще, чем я себя представлял.
Выкинуть из головы надо такие понятия как $job и такое, если ты конектился - ты хозяин положения.
У меня как система работает:
Во первых если создается БД, то программа автоматом пишит
в глобаль все что относится к ней для дальнейшего обращения:
^sysconfig("test","database")="/home/test/test.dat"
^sysconfig("test","gld")="/home/test/test.gld"
^sysconfig("test","journal")="/home/test/test.mjl"
^sysconfig("test","o")="/home/test/o"
^sysconfig("test","patch")="/home/test/o(/home/test/r) /usr/gtm63A"
^sysconfig("test","r")="/home/test/r"
^sysconfig("web","database")="/home/web/web.dat"
^sysconfig("web","gld")="/home/web/web.gld"
^sysconfig("web","journal")=""
^sysconfig("web","o")="/home/web/o"
^sysconfig("web","patch")="/home/web/o(/home/web/r) /usr/gtm63A"
^sysconfig("web","r")="/home/web/r"
Я уже эти настройки дальше использую при вызовах.
Исходя из того, что не имеет значения сколько пользователей работают одновременно,
просто при каждом действие (любое!) нужно указать системе где пользователь НАХОДИТСЯ !
Я это заметил почти у всех разработчиков ПО, которые работают с GT.M - WEB
У них даже функции специальные есть (db.open, db.close) и меня всегда это удивляло,
зачем постоянно открывать и закрывать ? ..
Закончил действие, закрыл сокет и т.д. - здесь это уже выступает как правило.
+
 tcpdev:(ZLISTEN=port_":TCP":NODELIMITER:ZNODELAY:ATTACH="listener"):timeo:"SOCKET"
 
e  s ^fcgilog($job)="-1,NotOpen" q
 
;u tcpdev:morereadtime=100
 
tcpdev
 
/listen(1)
 
f  d  q:$key]""
 
/wait(timeo)
 . 
i $key]"" q
 s 
socket=$p($key,"|",2)
 
tcpdev:(SOCKET="listener"listen^test
loop 
 
tcpdev:(NODELIMITER:ZNODELAY:SOCKET=socket)
 ....
 ....
 
w $C(1,3,requestIdB1,requestIdB0,0,8,0,0),$C(0,0,0,0,0,0,0,0) ; Request Complete
 
nr=0
 
tcpdev:(SOCKET=socket)
 
tcpdev
Вы правильно заметили, что нужно указать именно здесь системе, где находится пользователь
и какое действие нужно выполнить, т.е переключаться, выполнить действие и закрываться.
gluconat_ca
startappl(appl)
 
(appl,%fcgi)  ;здесь может что ещё нужно вставить, что надо 
 ;сохранить $zg и , если надо $zro
 ;установить нужные $zg, $zro (здесь как раз cid и может пригодиться)
 ;настроить обработчик ошибок, если нужно
 
@appl
 
;восстановить $zg,$zro
 
q
а в основном коде FCGI заменить
d:t'="" @t
на
d:t'="" startappl(t)
Мне просто нужно в своих Ajax вызовах указать в какой "области" происходят действия и ВСЕ.
Уверен, что это сработает.
Спасибо.
27 янв 17, 09:28    [20151973]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu,
Давайте отвлечёмся от несущественного, от сокетов, фастцги и пр.
У вас есть некая m-программа, назовём её S, которая запускается в неком контексте, имеет доступ к файлу с глобалами, которые ей нужны для выполнения своей функции, в частности выполнения (командой DO) некоторого определённого набора программ Xi. Эти программы должны в свою очередь запускаться с предварительно настроенным контекстом ($zg,$zro) Сi . Выбор программы для запуска определяется путём получения неких параметров извне, способ получения значения не имеет. Вопрос в контексте для вызова, как его определить. Это тоже вопрос соглашения, он не может быть универсальным. Как задумаете, так и будет работать.
Вот варианты наобум. Для каждой Xi:
1. иметь заранее определённый Ci
2. иметь заранее определённый набор Cij, где второй индекс j определяется получением извне
3. все данные для контекста получать извне.
и т.д.
Только нужно иметь ввиду, что, если есть какая либо параметризация в определении контекста, как в п.2 и п.3, то нужно определиться для случая "по умолчанию", когда параметр не передаётся.

В любом случае нужны некие, заранее формируемые, настройки (конфигурации) программы S в рамках которых она и будет работать.

Вот такое у меня сложилось представление. Может быть изложенное всё мимо?
27 янв 17, 09:36    [20151990]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu,
опубликовал, не успев прочитать ответ 20151973.
27 янв 17, 09:41    [20152011]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 1942
gluconat_ca,
Еще заметил один нюанс ...
В первом варианте, что от Бантела, сокет открывается, действие, потом полностью закрывается.
Я пробовал еще один вариант, как указал ниже.
Открываем, записываем в переменную, закрываем и ждем нового подключения, давая предыдущему
соединения отработать до конца.
Так мы большую независимость представляем пользователю. Плюс использования и SID.
 socket=$p($key,"|",2)
 
tcpdev:(SOCKET="listener"listen^test
loop 
 
tcpdev:(NODELIMITER:ZNODELAY:SOCKET=socket)
Не знаю насколько я прав.
27 янв 17, 10:21    [20152192]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Не вполне понимаю, что имеется ввиду под "отработать до конца"
В оригинальном FCGI.m сокет держится открытым пока идут определённые типы запросов (см. fcgi("type") ) и закрывается после отработки запроса и отправки наверх FCGI_END_REQUEST. После сокет закрывается и переходит к новой итерации приёма запроса. Всё по спецификации fastcgi.
27 янв 17, 11:02    [20152480]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu,
Сразу не понял о чём речь. Ничего не скажу о правильности использования сокетов (нужно погружаться в документацию чтобы вспомнить детали). В новых версиях gt.m есть и другой подход, не рестарт слушателя порта в новом JOBе, а запуск процесса обработчика с передачей ему хендлера (сокета), а сам процесс опять приступает к прослушке порта. Мне, лично такой подход больше нравится. К тому же в первом варианте нужно обеспечить передачу из процесса в процесс (слушатели) значение переменной nr, которая растёт от запроса к запросу и которая используется для генерации cid, иначе они (cid) могут продублироваться для разных запросов, приходящих в пределах одной секунды.
Могу посоветовать, в дополнении к документации, в качестве примера использования - web-сервер DataBalet https://github.com/lparenteau/DataBallet
27 янв 17, 15:51    [20153955]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

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

Я в курсе, даже пробовал, но смутно до меня доходит,
как использовать дочерний процесс с передачей его новым job-ом
В Каше просто и ясно. Здесь закручено очень.
Да и простого примера не хватает.
Я когда их спрашиваю, они сразу советуют пользоваться XINETD.
Я пробовал и этот вариант - РАБОТАЕТ! XINETD+ FCGI.
Т.Е. без использования родного сокета самого GT.M
27 янв 17, 16:52    [20154335]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
gluconat_ca
Member

Откуда:
Сообщений: 85
Valeriu
Я пробовал и этот вариант - РАБОТАЕТ! XINETD+ FCGI.

Опять не вполне понятно, а как работает в данном случае fastcgi? Впрочем, пожалуй я откланяюсь, дела. Удачи!
27 янв 17, 17:12    [20154444]     Ответить | Цитировать Сообщить модератору
 Re: [gtm] Ajax + WEB  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 1942
gluconat_ca,
Не совсем удачно обьяснил ...
FCGI.m.
Ну по идеи и сам fcgi .
27 янв 17, 18:01    [20154680]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Caché Ответить