Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
Хотелось попробовать сделать "клиент-серверный" вызов функции на сервере через "TCP Binding" между 2-мя Сache и вернуть результаты. Есть пример: в одном терминале если запустить: do server^test и в другом терминале если запустить: do client^test - то дейстивтельно, на клиент идет номер $JOB из child - это зашито в server^test Вопрос: - а как из клиента "запросить" значение глобала или результат функции с сервера? Нет ли у кого примера ? заранее большое спасибо test.int Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 15:16 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
Собсно как запрограммуеш. Передаются у тебя строки. Из строк сооружаеш протокол. Мы гоняли списки ЕМНИП. А так уже дело твое - тут возращаем глабал тут выполняем Query. Без "протокола" никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 16:23 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
PtnСобсно как запрограммуеш. Передаются у тебя строки. да вот что-то ни одной попытки передать запрос клиента на сервер и получить ответ обратно пока не получилось Как все эти READ-WRITE-ы нужно нарисовать? Чтобы к примеру клиент посылает строку - нужен глобал ^Pluk - сервер читает и отправляет ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2007, 19:31 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
Чет не помню что означает модификатор М для опен - я использовал S Далее пишу две низкоуровневые процедуры, собсно это класс одинаково используемый как на клиенте так и на сервере - способ соединения токо разный. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Осторожно токо буковки смотри - а то букву L иногда можно за 1-цу принять Основная идея - посылаем два байта длины и строку данных. Ограничения на 32К - от каши. В строке у меня например листбилд... -Команда -не помню чего :) -не помню чего :) -не помню чего :) -данные Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. А у ж что по команде делать дело ваше - глобал читать, JOB запускать, запрос выполнять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 09:36 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
тут процедуры описанные выше - внутри объекта %connection Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 09:56 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
ЗЫ: блин ну ошибок же понаписал таварищ Птн впопыхах :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 10:02 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
Ptn для опен - я использовал S а где-же в примере OPEN и IP сервера? "обьект %connection" - это что такое? что-то ни в студии, ни в доках пока не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 13:17 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
decaml"обьект %connection" - это что такое? что-то ни в студии, ни в доках пока не нашел Ptn ... собсно это класс одинаково используемый как на клиенте так и на сервере - способ соединения токо разный. Елки палки :) это объект совбственно-ручно написанного класса который генерит слушающший процесс и в котором инкапсулированы функции чтения записи и разбора "протокола" первого уровня. Я приводил примеры-выдержки из него - должно быть достаточно понятно как работает один из вариантов обмена. Полностью код публиковать мне как то не с руки - хотя и авторство мое, поддерживаю его сейчас не я :)) decamlа где-же в примере OPEN и IP сервера? на клиенте Код: plaintext на сервере Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Общая схема такова Регистред Класс -> внутри параметры соединения и методы Read Write OpenConnection Close ServerStart и т.д. На клиенте Код: plaintext 1. 2. 3. 4. 5. На сервере Код: plaintext 1. после чего задача сервера обеспечивает существование объекта %coonection (аля %session и %request) связанного с запрашиваемым узлом для каждого форкнутого соединения. Класс просто удобен тем что в него запихиваеш начальный протокол обмена - а потом сверху и ваяеш если что нужно. ООП как никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 13:49 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
ну понял, спасибо, тут надо вкуривать и вкуривать, наверно месяца 2, гибкая технология - и обьекты, и sql-шлюз, но на cos пока спросить данные у Cache задача не из легких а вроде хотел то, чтобы csp-страничка в зависимости от запроса юзера читала данные с разных ecp-клиентов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 15:21 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
Э-э-э Вы ж уже создавали вопрос на эту тему ... и вызов и ЕСП... и это совсем другой отдельный коленкор. Работать напрямую с ECP нельзя - протокол как бы закрытый. Но что мешает использовать его в стандартной кофигурации непонятно... Что же до простой CSP страницы - то : 1 - можно делать просто редирект на интересующий вас сервер (минусы: держать на нем вебсервер и непонятки с лицезиями из-за grace period - либо трейдид лицензии либо думать - зато очень просто) 2 - Вызвать свой клиент- сервер - наподобие того что описан выше . Просто вместо чтения глобала - нужно создать съимитировать объекты %session, %request и вызвать Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 17:49 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
PtnЭ-э-э Ptn, ну это похоже на полный редирект :-), зря я упомянул csp и еср - они есть, для тех функций, для которых их придумали в принципе если быть точным, в рамках общей идеи csp - это "клиент", а ecp-клиент - это "сервер", но эта детализация не имеет значения топик же и был - как сделать этот "клиент-серверный" запрос на cos, но из обмена мнениями оказалось, что это весьма нетривиально я бы даже заплатил за работающий пример "стека необходимых классов", чтобы не париться можем посотрудничать коллективное решение проблем - это кредо моего проекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 20:32 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
decaml PtnЭ-э-э Ptn, ну это похоже на полный редирект :-), зря я упомянул csp и еср - они есть, для тех функций, для которых их придумали в принципе если быть точным, в рамках общей идеи csp - это "клиент", а ecp-клиент - это "сервер", но эта детализация не имеет значения топик же и был - как сделать этот "клиент-серверный" запрос на cos, но из обмена мнениями оказалось, что это весьма нетривиально я бы даже заплатил за работающий пример "стека необходимых классов", чтобы не париться можем посотрудничать коллективное решение проблем - это кредо моего проекта Что-то очень сложные варианты рассматриваются. Если производительность не очень критична, стоит использовать Web-сервисы. В Cache' есть Web-сервисы и SOAP-клиент. Примеры работы есть в SAMPLES. Дополнительные у консультантов InterSystems. Можно еще использовать поддержку почтовых протоколов, есть еще классы для работы с HTTP... Но я советую начать с Web-сервисов. Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 21:53 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
PtnОбщая схема такова Регистред Класс -> внутри параметры соединения и методы Read Write OpenConnection Close ServerStart и т.д. Уважаемый, Ptn, Вы не могли бы еще показать как реализован метод ServerStart и OpenConnection? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 01:11 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#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. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 11:09 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
Ptn, спасибо, чувствую как глаза налились радостью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 16:05 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
однако заработало клиент set con=##class(User.Net).%New() if con.OpenConnection("127.0.0.1","9001") { d con.TWrite($lb("GSA:READ","^Pluk")) for { set ret=con.TRead() quit:con.Status'=1 //w ret set comand=$lg(ret,1) quit:comand'="GSA:READOK" w "Узел :",$lg(ret,2) w " = ",$lg(ret,3),! } } set con="" q сервер do ##class(User.Net).ServerLoop() класс ... /// Читаем первую команду s %x=%connection.TRead() i %connection.Status<0 g childErr // Чего нибудь делаем //------------------------------- if $lg(%x,1)="GSA:READ" { d %connection.GSAREAD($lg(%x,2)) }elseif 0=1 { // ... } //------------------------------- s ^CacheTempserverlog($i(^CacheTempserverlog))=$j_" Server JOB Complete" ... Method GSAREAD(glb As %Library.String="") As %Integer { new var,ret set $ZT="GSAREADerr" set var=$g(glb) d %connection.TWrite($lb("GSA:READOK",var,$g(@var))) for { set var=$q(@var) quit:var="" d %connection.TWrite($lb("GSA:READOK",var,$g(@var))) } set $ZT="" q GSAREADerr set $ZT="" q } ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 12:55 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
Если на клиенте сделать в цикле 400 "считываний" ^Pluk, и повторять запуск серий, то на вызове con.TWrite порой проскакивает con.Status=-1 (ошибка) - в 70 из 400 случаев в 1-ой серии (т.е. 330 успешных соединений), в 180 из 400 во 2-й серии, в 250 из 400 в 3-й серии в 310 из 400 в 4-й серии в 330 из 400 в 5-й серии в 360 из 400 в 6-й серии потом "сокет-сервер" как накушался чего-то и не принимает клиентские вызовы место ошибки - метод %write начинает уходить в $ZT на этой строчке u ..device w $C(l\256,l#256),$e(astr,0,l) w ! s $ZT=ozt u oio s ..Status=1 q ..Status рестарт "сокет-сервера" не помогает а после рестарта каше "сокет-сервер" оживает интересно какая бы могла быть причина таких ошибок? (WindowsXp + cache5.0.11) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 20:29 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
ой, количество ошибок резко уменьшилось если вместо Код: plaintext 1. 2. 3. написать Код: plaintext 1. 2. 3. ошибок коннектов меньше в разы 5 из 400 20/400 40/400 57/400 136/400 Интересно можно освобождать номера устройств? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2007, 21:34 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
уф, разобрался :-) на клиенте добавил освобождение устройства и нет никаких ошибок Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2007, 17:00 |
|
||
|
OPEN,USE,READ,WRITE-"клиент-сервер" через "TCP Binding"
|
|||
|---|---|---|---|
|
#18+
ну хуже не станет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2007, 17:39 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=34686479&tid=1559276]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 438ms |

| 0 / 0 |
