Jump to content

Kenneth

uniGUI Subscriber
  • Posts

    156
  • Joined

  • Last visited

Everything posted by Kenneth

  1. @zilav спасибо. Но почему так сложно, это по сути придется дополнительный сервис поднимать ради этого, ведь сам компонент уже предполагает в себе все эти функции. Все это конечно можно сделать, но как то усложняет систему, тогда мне было бы проще взять тот же компонент с FIBов или FireDac и уже его прикрутить. У них то это все работает. Хотя не проверял на сколько стабильно, может действительно где то в недрах есть проблемы. Но в любом случае, неужели нет возможности использовать стандартный компонент(UniAlerter)? Хотелось бы услышать мнение насколько это оправдано создавать для этого отдельный сервис, а не возиться с настройками UniAlerter или ему подобных компонентов?
  2. @zilav, @stas спасибо вам за советы, не могли бы еще скинуть ссылку на рабочий код работы с вебсокетами? Поиск по форуму не дал результатов У меня тоже стоит задача обновлять датасеты.
  3. А что ему мешает не работать? FireDac работает, FibPlus работает, так почему бы UniDacу не рабоать? DevArt UniAlerter - это не VCL, это один из компонентов для работы с базами данных. Если слышали что-нибудь про линейку компонентов FireDac, которая присутствует в комплекте с IDE дельфи, то это такой же аналог. В FireDac есть TFDEventsAlerter, так вот он работает с UniGui, но uniAlerter не реагирует. Хотя если делаю все тоже самое в обычном десктопном приложении он отзывается. Я не претендую на то чтобы разработчики UniGui занимались этим вопросом, но тем не менее, может кто то сталкивался с таким и мог бы подсказать, что не так с этим Алертом?
  4. Уважаемый @x11 вы только заголовки читаете? Что значит ничего общего не имеет? Все что нужно я написал в вопросе и думаю там все понятно описано о моей проблеме.
  5. Всем привет! Может кто сталкивался. Решил использовать UniDac вместо FireDac, вроде все хорошо работает, но единственное, не работает UniAlerter, вроде ивентсы указал, авторегистер = тру, посылаю сообщение, тишина. И главное на десктопном приложении все работает как надо, а вот в uniGui не хочет. И еще после закрытия сервера выводит ошибку Видать все таки приходят сообщения, но не обрабатываются. Если сообщений не посылать, то этой ошибки нет. P.S. Сервер Firebird 3.0
  6. for UniContainerPanel1: Layout:=vbox, LayoutAttribs: Aling:=Center, Pack:=start;
  7. Все вопрос снят. Пока писал ответ, меня осенило Параметр ServerLimits.MaxSession:=1000, был выставлен на целевом сервере, который я тестил, а в промежуточном клиенте стояло 250! Вот он то выводил исключение. Всем спасибо за советы!
  8. Сервер конечно! А чего не понятного, я же все подробно описал, что я через клиента гружу сервер, в этом и заключается тест. Основная нагрузка на сервер идет, т.к. он за минуту обрабатывает 250 сессий в которых работает с базой! Я писал что напрямую через СтрессТул не получиться тестить, поэтому я создал клиента, которого грузит СтрессТул, а тот в свою очередь сервер. Надеюсь понятна мысль? StressTool -> Client -> Web Server.
  9. @stas код не до конца скопировал, две последние строчки оставил: AResponseInfo.ResponseNo:=200; Handled:=true; end; Там все нормально. Теперь на счет тестирования. Согласен напрямую не протестируешь. Поэтому я запустил свой тестовый проект, создал другое приложение, в котором на форме бросил две кнопочки, одна отправляет запрос на мой сервис для вставки записи, другая на селект. Через StressTool запускаю запись сценария, запускается второе приложение, которое обращается к моему целевому, нажимаю последовательно эти две кнопочки, завершаю запись и после прогоняю этот сценарий. При удачном тесте все записи 250 запсей вставляются, что говорит о работе теста. Так что не думаю что СтрессТул неприменим. Вопрос остается, почему не получается увеличить кол-во сессий больше 250?
  10. Небольшой отчет о проделанной работе, к чему привели тесты. Не буду описывать что и как я перепробовал, имею ввиду все варианты, а начну сразу с рабочего варианта, то что действительно дало результаты. Создаю в FDManager соединение с пулом, соединения с базой и сами запросы создаю в рантайме, и после уничтажаю их. Что использовал: Firebird 3.0 + FireDac. На серверМодуль кидаю FDManager, в onCreate настраиваю подключение с пулом и делаю актив=тру. Все как доках. И все! Дальше принимаю запрос и делаю следующее: if ARequestInfo.URI = '/test/ins' then //запрос на вставку записи begin Con:=TFDConnection.Create(self); con.ConnectionDefName:='FB_Con_srv'; con.Connected:=true; with TFDCommand.Create(self) do begin Connection:=con; CommandText.Add('insert into tbtest(name) values('''+ARequestInfo.Params.Values['n']+''');'); try Execute; AResponseInfo.ContentText:='ok'; AResponseInfo.ResponseNo:=200; finally free; con.Free; end; end; Handled:=true; end else if ARequestInfo.URI = '/test/get' then //запрос на селект begin Con:=TFDConnection.Create(self); con.ConnectionDefName:='FB_Con_srv'; con.Connected:=true; with TFDQuery.Create(self) do begin Connection:=con; SQL.Add('select count(*) as cnt from tbtest;'); try Active:=true; AResponseInfo.ContentText:='{"cnt":'+FieldByName('CNT').AsString+'}'; Close; finally Free; con.Free; end; end; Тестил через Stress TestTool. В тесте сначала вставляю запись в табилцу, потом следующей сессией выбираю кол-во записей. 250 Сессий отрабатывает на ура, но почему если делать больше, то вылетает с ошибкой. ServerLimits.MaxSession:=1000; Что еще нужно подкрутить?
  11. Да буду делать тесты, прежде думал спросить, может кто то сталкивался, чтобы не изобретать велосипед.
  12. @stas прошу прощения, я почему то не так прочитал. даже во второй раз. Да все верно вы написали. А если использовать один коннект с пулом и создавать запросы не будет легче?
  13. @stas да согласен, что нужно создавать в рантайме, но не МаинМодуль, достаточно думаю коннект или запросы
  14. Ого сколько мнений! Спасибо за советы! Что то все ушли в сторону МаинМодуля, но по-моему как то это не верно! Задача то по сути следующая: 1. получать http запросы извне; 2. произвести некие действия с базой; 3. вернуть результат. Вот в принципе и все что надо. МаинМодуль это больше про сессии, которые как бы здесь не особо меня интересуют. Основное опасение, не будут ли мешать запросы друг-другу, так как СерверМодуль один и коннект один. Тут по-моему есть два варианта: 1. создавать динамически коннект, делать свои дела и уничтожать 2. или создать один коннект с пулом и динамически создавать запросы и уничтожать. 3. или еще ваш вариант.... Будет ли это работать так как надо при больших нагрузках? Как себя поведет СерверМодуль если одновременно прилетит один и тот же запрос с 10 адресов? Он выполнит их паралельно или же поставит в очередь или же зависнет? Хотелось бы все таки услышать мнение самих разработчиков или все же смотреть в сторону других решений?
  15. http запрос не доходит до MainModule, если знаете как его до туда донести, подскажите. В СерверМодуле есть две прекрасные функции UniGUIServerModuleHTTPCommand и UniGUIServerModuleHTTPDocument, в которых я и принимаю мои запросы, но как до MainModule их донести?
  16. грид привязан к датасету? может поля попробовать создать в самом гриде, хотя он должен все показать, если не создавать
  17. Так в том то и вопрос, предназначена ли она для этого. Говорю же, увидел поддержку веб сервисов. А так думаю неплохо было бы в самом унигуи иметь такой сервис и уже ничего стороннего не подключать. Сейчас нашел delphimvcframework. Разбираюсь. А кто чем пользуется? Я так понимаю при каждом запросе должен создаваться отдельный поток с подключением, чтобы не мешать друг другу, чего в ServerModule можно добитсья создавая динамически отдельное соединение, но насколько это оправдано в рамках экономии памяти, не раздует ли сервер при множестве запросов? Ну еще можно с пулом соединения поиграться. В общем у кого какой опыт, поделитесь, направьте пожалуйста.
  18. Всем привет! Возник такой вопрос, могу ли я использовать UNIGUI как RestFul Api? В ServerModule есть возможность принимать запросы ПОСТ, ГЕТ с параметрами и в принципе технически, я так понял, можно принять запрос с параметрами, обратиться к базе и обратно вернуть JSON ответ. Я все это уже сделал и в принципе все неплохо работает, но возник вопрос! В документации настоятельно не рекомендуют создавать подключение к базе данных в ServerModule, так как это один глобальный ресурс нашего приложения и при многопоточной работе могут возникнуть конфликты, особенно при редактировании данных. Есть конечно вариант занести в критическую зону, но не думаю что это решение для 100 и более подключений. Поэтому, если я один обращаюсь к этому вэб-сервису, то проблем нет, а если сразу будет 100 подключений? Как это решается, ведь не просто так были созданы процедуры обработки http запросов в ServerModule? Или это сделано только для чтения и для особых случаев, но не для организации вэб сервиса? Если все таки можно, то подскажите куда двигаться? Надеюсь понятно изложил мысль?
  19. Есть свойство uniDBGrid.WebOptions.Paged:=false; Это чтобы по страницам не клацать. Ну и логично uniDBGrid.WebOptions.FetchAll:=false; На счет того чтобы верхние записи выгружал не могу сказать.
  20. @Sherzod Thanks It work. Actually I need to change TUnimScrollBox position. How can I do it?
  21. @Sherzod How to do it for mobile version?
  22. @Sherzod Спасибо, все отлично работает!
  23. Тоже пробовал, результат такой же. Попробую еще раз. Кстати после добавления страниц PageCount всегда равен 0. Как будто ничего не добавилсь, хотя руками карусель прокручивается, а программно не могу прокурить на нужную страницу.
  24. @Sherzod спасибо, очень жду!
×
×
  • Create New...