Škálovatelné relace pro pokročilé webové aplikace

Automaticky přeloženo z Deepl

Webové aplikace jsou dnes základními moderními nástroji. S rostoucím výkonem strojů a procesorů musí webové aplikace neustále splňovat požadavky na výkon. Proto 4D Web Server v18 R6 nabízí nový druh webové relace: škálovatelnou webovou relaci.

Pojďme se dozvědět více!

HDI: Škálovatelné webové relace

Dříve jste byli zvyklí na možnost Automatická správa relací na webové stránce Nastavení struktury. Bylo vhodné udržovat data relace na serveru živá.

Zatímco webový server 4D je preemptivní a dokáže využít všechna dostupná jádra k zodpovězení webových procesů, každá relace (představující prohlížeč od koncového uživatele) byla zpracovávána prostřednictvím jediného procesu, takže několik požadavků přicházejících najednou z tohoto prohlížeče bylo zpracováváno postupně, jeden po druhém

Nyní jsou škálovatelné webové relace schopny obsluhovat několik procesů v preemptivním režimu. To znamená, že škálovatelné webové relace mohou zpracovávat několik požadavků uživatelského agenta současně. To výrazně zvyšuje výkon.

A to není všechno! Tyto nové škálovatelné webové relace mohou mezi těmito procesy sdílet data.

Práce se škálovatelnými webovými relacemi

Chcete pracovat s novými škálovatelnými webovými relacemi? Nic nemůže být jednodušší. Stačí aktivovat nová webová nastavení a spustit webový server.

Se škálovatelnými webovými relacemi se pracuje prostřednictvím objektu

Po aktivaci nastavení můžete relaci zpracovávat prostřednictvím objektu. Nový Session vrátí tento objekt.

Je k dispozici v jakémkoli webovém procesu spouštěném pomocí značek 4D, akcí 4D, funkcí REST (tříd datového modelu ORDA) a metod databází, například On Web Authentication / On Web Connection.

Díky tomuto objektu můžete zpracovávat mnoho aspektů webové relace.

Zde je příklad toho, co uvidíte v ladicím programu:

blank

sdílení dat mezi procesy

Tento Session objekt je dodáván s storage vlastnost, která je sdíleným objektem. Do tohoto objektu můžete ukládat libovolná data, která chcete sdílet mezi požadavky přicházejícími z uživatelského agenta na relaci. storage vlastnost.

příklad

V tomto příkladu máme aplikaci CRM. Každý prodejce spravuje své vlastní portfolio klientů. Databáze obsahuje dvě propojené datové třídy: Customers a SalesPersons (prodejce má několik zákazníků).

blank

Řekněme, že webový server je spuštěn na vašem počítači (IP) pomocí portu HTTPS(port).

Když prodejce zadá do webového prohlížeče adresu URL IP:port/4DACTION/authenticate?userId=1, zavolá se metoda authenticate.

V relaci jsou uloženi tři nejlepší zákazníci prodejce. Zde je kód metody authenticate:


var
$indexUserId : Integer
var $userId: Integer
var $info : Object
var $userTop3 : cs.CustomersSelection
var $sales : cs.SalesPersonsEntity
ARRAY TEXT($anames; 0)
ARRAY TEXT ($avalues; 0)

WEB GET VARIABLES
($anames; $avalues)
$indexUserId :=Find in array($anames; "userId")
$userId :=Num($avalues{$indexUserId})
$sales :=ds.SalesPersons.query("userId = :1"; $userId).first()
If ($sales#Null)
Use (Session.storage)
If (Session.storage.myTop3=Null)
$userTop3 :=$sales.customers.orderBy("totalPurchase desc").slice(0; 3)
Session .storage.myTop3:=$userTop3
End if
End use

end if
WEB SEND HTTP REDIRECT ("/sessionStorage.shtml")

Dále je tato trojice nejlepších přístupná při jakémkoli požadavku přicházejícím z uživatelského agenta (např. ve stránce SHTML):

<center><h3>Vaši tři nejlepší zákazníci</h3></center>
<table class="table">
<!--#4DCODE
$i:=0
$myTop3:=Session.storage.myTop3
-->
<tr><th>Jméno</th><th>Celkový nákup</th></tr>
<!--#4DLOOP ($i<$myTop3.length)-->
<tr>
<td ><!--#4DTEXT $myTop3[$i].name--></td>
<td ><center><!--#4DTEXT $myTop3[$i].totalPurchase--></center></td>
</tr>
<!--##4DEVAL $i:=$i+1-->
<!--#4DENDLOOP-->
</table>

A zde je výsledek:

blank

nadcházející akce s relací

Do budoucna pracujeme na přesné správě oprávnění. Tak, aby bylo možné udělovat přístup + operace s daty podle oprávnění.

Prozatím můžete informace o uživateli vložit do relace díky funkci setPrivileges( ). Tato funkce bude v některé z příštích verzí rozšířena tak, aby zvládala více akcí pro privilegia.

příklad

var $indexUserId dsSalesPersonsquery $userId: Integer
var $userId : Integer
var $sales : cs.SalesPersonsEntity
var $info : Object
ARRAY TEXT ($anames; 0)
ARRAY TEXT ($avalues; 0)
WEB GET VARIABLES ($anames; $avalues)
$indexUserId :=Find in array($anames; "userId")
$userId :=Num($avalues{$indexUserId})
$sales := xml-ph-0035@deepl.ifirst()
$info :=New object()
$info .userName:=$sales.firstname+""+$sales.lastname

Session .setPrivileges($info)

Své webové stránky si tedy můžete přizpůsobit přidáním něčeho takového:

<center>
<h3>
Hello <!--#4DEVAL Choose(Session.userName # ""; Session.userName; "nobody")-->
</h3>
</center>

Zde je výsledek:

blank

Jak jste si mohli všimnout na snímku obrazovky ladicího programu, škálovatelné webové relace se zavřou (timeout) po 60 minutách nečinnosti (tj. žádná žádost nevyžádá relaci).

Stáhněte si výše uvedené HDI, abyste zjistili více, a zapojte se do diskuse na fóru 4D!

Avatar
• Product Owner • Marie-Sophie Landrieu-Yvert se připojila k programovému týmu 4D jako Product Owner v roce 2017. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Marie-Sophie vystudovala inženýrskou školu ESIGELEC a svou kariéru zahájila jako inženýrka v IBM v roce 1995. Podílela se na různých projektech (projekty údržby nebo výstavby) a pracovala jako vývojářka Cobol. Poté pracovala jako UML designer a Java developer. V poslední době byly jejími hlavními rolí analyzovat a psát funkčních požadavky a koordinovat obchodní a vývojové týmy.