|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Валерий, не проще ли вместо игры с $zglb обращаться к разным областям по полной глобалной ссыле ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 22:25 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
andrew000999, Была и эта мысль, к глобалам без проблем, а как насчет рутин ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2017, 22:38 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Короче здесь так получается. Пользователь открыл сокет, получил данные и СРАЗУ же закрыл Второй, или тот кто по очереди естественно опять открывает и закрывает. Т.е. если пользователь перешел в другую область (глобальный каталог,рутин) он перебрасывает сюда и предыдущих без их ведома. Получается как бы ОДНО ПОЛЬЗОВАТЕЛЬСКОЕ приложение.. Конечно хочется не так, а неограниченное количество независимых соединений. Вот код работы сокета: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141.
Я пробовал разные варианты, но вопрос так и остался. Может я что-то неправильно делаю ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 09:17 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu, Работу этого сервера можно не менять. Он работает в определённом контексте ($zg,$zro), который "отработчики" конкретных запросов должны по выходу восстанавливать. Вот участок кода, где происходит косвенный вызов "отработчика" Код: plaintext 1. 2.
1. сохранить текущее значение $zg и $zro 2. Установить нужное значение $zg и $zro 3. Выполнить нужный код 4. Восстановить сохранённое в п.1 и выйти ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 10:46 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
В дополнении к вышесказанному. Конечно, по-правильному, все эти пункты лучше вставить в сам FCGI.m, чтобы не дублировать во многих местах. Добавить процедурку в FCGI.m, типа такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 14:40 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
gluconat_ca, Спасибо большое. Что-то зашевелилось с таким подходом. Да. Приходится менять везде... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 15:04 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu, А зачем в цикле перебирать: Код: plaintext 1. 2. 3. 4.
Если можно сразу: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 16:08 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
В продолжении. и это лишнее Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 16:53 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
gluconat_ca, Придется писать маленький бат-ник все таки .. Где указать системную директорию (gtm_dist) У меня например /usr/gtm63A/mumps.gld Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 17:13 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu, Сохранять текущие $zg,$zro можно же и в локальных переменных, я собственно и имел это ввиду. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 17:23 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
gluconat_ca, Да, сам заметил что в глобал не самый хороший вариант.. Очень трудно отследить всех пользователей кто куда и что выбирает. Уже пробовал - началась путаница.. Но FCGI еще не знает $zg,$zro ни новые не старые значения !!! Я не знаю где брать локальные переменные - а было бы хорошо.. Потом уже. Когда пользователь нажимает на "область", я должен это фиксировать плюс, должен знать постоянно где находится дистрибутив. может что-то путаю, уже конец рабочего. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 17:41 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu, честно говоря я в некотором замешательстве. Не могу взять в толк, в чём проблемы, особенно с локальными переменными. Просто тупо пишем: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 18:44 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
gluconat_ca, Да.. Вот что значит старые привычки. Я никак не могу отходит от старых понятий работ М систем. Поплыл я далеко и совсем не туда. Прошу прощения. Видимо здесь гораздо даже проще, чем я себя представлял. Выкинуть из головы надо такие понятия как $job и такое, если ты конектился - ты хозяин положения. У меня как система работает: Во первых если создается БД, то программа автоматом пишит в глобаль все что относится к ней для дальнейшего обращения: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Исходя из того, что не имеет значения сколько пользователей работают одновременно, просто при каждом действие (любое!) нужно указать системе где пользователь НАХОДИТСЯ ! Я это заметил почти у всех разработчиков ПО, которые работают с GT.M - WEB У них даже функции специальные есть (db.open, db.close) и меня всегда это удивляло, зачем постоянно открывать и закрывать ? .. Закончил действие, закрыл сокет и т.д. - здесь это уже выступает как правило. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
и какое действие нужно выполнить, т.е переключаться, выполнить действие и закрываться.gluconat_castartappl(appl) n (appl,%fcgi) ;здесь может что ещё нужно вставить, что надо ;сохранить $zg и , если надо $zro ;установить нужные $zg, $zro (здесь как раз cid и может пригодиться) ;настроить обработчик ошибок, если нужно d @appl ;восстановить $zg,$zro q а в основном коде FCGI заменить d:t'="" @t на d:t'="" startappl(t)Мне просто нужно в своих Ajax вызовах указать в какой "области" происходят действия и ВСЕ. Уверен, что это сработает. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 09:28 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu, Давайте отвлечёмся от несущественного, от сокетов, фастцги и пр. У вас есть некая m-программа, назовём её S, которая запускается в неком контексте, имеет доступ к файлу с глобалами, которые ей нужны для выполнения своей функции, в частности выполнения (командой DO) некоторого определённого набора программ X i . Эти программы должны в свою очередь запускаться с предварительно настроенным контекстом ($zg,$zro) С i . Выбор программы для запуска определяется путём получения неких параметров извне, способ получения значения не имеет. Вопрос в контексте для вызова, как его определить. Это тоже вопрос соглашения, он не может быть универсальным. Как задумаете, так и будет работать. Вот варианты наобум. Для каждой X i : 1. иметь заранее определённый C i 2. иметь заранее определённый набор C ij , где второй индекс j определяется получением извне 3. все данные для контекста получать извне. и т.д. Только нужно иметь ввиду, что, если есть какая либо параметризация в определении контекста, как в п.2 и п.3, то нужно определиться для случая "по умолчанию", когда параметр не передаётся. В любом случае нужны некие, заранее формируемые, настройки (конфигурации) программы S в рамках которых она и будет работать. Вот такое у меня сложилось представление. Может быть изложенное всё мимо? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 09:36 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu, опубликовал, не успев прочитать ответ 20151973 . ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 09:41 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
gluconat_ca, Еще заметил один нюанс ... В первом варианте, что от Бантела, сокет открывается, действие, потом полностью закрывается. Я пробовал еще один вариант, как указал ниже. Открываем, записываем в переменную, закрываем и ждем нового подключения, давая предыдущему соединения отработать до конца. Так мы большую независимость представляем пользователю. Плюс использования и SID. Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 10:21 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Не вполне понимаю, что имеется ввиду под "отработать до конца" В оригинальном FCGI.m сокет держится открытым пока идут определённые типы запросов (см. fcgi("type") ) и закрывается после отработки запроса и отправки наверх FCGI_END_REQUEST. После сокет закрывается и переходит к новой итерации приёма запроса. Всё по спецификации fastcgi. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 11:02 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu, Сразу не понял о чём речь. Ничего не скажу о правильности использования сокетов (нужно погружаться в документацию чтобы вспомнить детали). В новых версиях gt.m есть и другой подход, не рестарт слушателя порта в новом JOBе, а запуск процесса обработчика с передачей ему хендлера (сокета), а сам процесс опять приступает к прослушке порта. Мне, лично такой подход больше нравится. К тому же в первом варианте нужно обеспечить передачу из процесса в процесс (слушатели) значение переменной nr, которая растёт от запроса к запросу и которая используется для генерации cid, иначе они (cid) могут продублироваться для разных запросов, приходящих в пределах одной секунды. Могу посоветовать, в дополнении к документации, в качестве примера использования - web-сервер DataBalet https://github.com/lparenteau/DataBallet ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 15:51 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
gluconat_ca, Я в курсе, даже пробовал, но смутно до меня доходит, как использовать дочерний процесс с передачей его новым job-ом В Каше просто и ясно. Здесь закручено очень. Да и простого примера не хватает. Я когда их спрашиваю, они сразу советуют пользоваться XINETD. Я пробовал и этот вариант - РАБОТАЕТ! XINETD+ FCGI. Т.Е. без использования родного сокета самого GT.M ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 16:52 |
|
[gtm] Ajax + WEB
|
|||
---|---|---|---|
#18+
Valeriu Я пробовал и этот вариант - РАБОТАЕТ! XINETD+ FCGI. Опять не вполне понятно, а как работает в данном случае fastcgi? Впрочем, пожалуй я откланяюсь, дела. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 17:12 |
|
|
start [/forum/topic.php?fid=39&msg=39391852&tid=1556385]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 164ms |
0 / 0 |