WebBroker ve DataSnap üzerinde sgcHTML | eSeGeCe Blog

WebBroker ve DataSnap üzerinde sgcHTML

· Özellikler

sgcHTML, Delphi'de bileşenlerden, yazılacak hiç JavaScript olmadan bir web arayüzü oluşturmanızı sağlar. Şimdiye kadar bu sayfalar sgcWebSockets sunucusunda çalışıyordu. Artık aynı sayfaları herhangi bir Embarcadero WebBroker uygulamasından ve DataSnap sunucularından sunabilirsiniz, böylece mevcut bir REST arka ucu Delphi'den ayrılmadan tam bir web ön yüzüne dönüşebilir. Ayrıntılar, bileşenler ve kod yeni WebBroker & DataSnap sayfasında.

Bu, sgcHTML'in bir sunucu değil, bir oluşturucu (renderer) olması sayesinde işe yarar. Bileşen ve düğüm katmanı, sayfanızı herhangi bir socket, taşıma katmanı veya sunucu sınıfına bağımlılık olmadan düz bir HTML dizesine dönüştürür. Bu dize, bir WebSocket sunucusunun yanıtı olabildiği kadar kolay bir şekilde bir TWebResponse gövdesi de olabilir; aşağıdaki iki entegrasyonu mümkün kılan da budur.

Herhangi bir WebBroker uygulaması

TsgcHTMX_Engine_Server_WebBroker bileşeni, standart IWebDispatch arayüzünü uygular. Onu TWebModule'ünüze bırakın ya da bir TWebActionItem'dan DispatchRequest'ini çağırın; sgcHTML sayfasını, yerleşik CSS ve JavaScript varlıklarını ve htmx rotalarınızı sunar. Bağımsız bir TIdHTTPWebBrokerBridge üzerinde, ISAPI altında, bir Apache modülü altında ve CGI olarak çalışır, böylece halihazırda dağıttığınız hangi WebBroker barındırıcısı olursa olsun ona uyum sağlar.

uses
  Web.HTTPApp, sgcHTMX_Engine_Server_WebBroker, sgcHTMX_Router;

// Any WebBroker host: the engine's Owner is the web module,
// so the standard WebBroker dispatcher calls it automatically
FEngine := TsgcHTMX_Engine_Server_WebBroker.Create(WebModule1);
FEngine.Router := FRouter;   // your htmx routes and the page

Etkileşim, sıradan htmx HTTP gidiş-dönüşlerini kullanır, bu yüzden WebSocket'e gerek yoktur. İsterseniz, hiç htmx içermeyen, düz tam sayfa gezinme ve standart form gönderimleriyle çalışan, JavaScript kapalıyken de işleyen klasik bir mod vardır. Düz WebBroker'ın yapamadığı tek şey push'tur, çünkü CGI ve ISAPI altında istek ve yanıt socket'in sahibidir. Düz bir WebBroker barındırıcısında canlı güncellemeler için htmx yoklaması (polling) kullanın ya da aşağıdaki köprü sunuculara geçin.

DataSnap, tek port üzerinden canlı güncellemelerle

sgcWebSockets, bir DataSnap veya WebBroker uygulamasındaki Indy TIdHTTPWebBrokerBridge'inin yerine geçen, doğrudan takılabilen köprü sunucuları zaten sunar, böylece sunucu aynı port üzerinde WebSockets, HTTP/2 veya HTTP.sys kazanır. sgcHTML artık doğrudan bunlara bağlanır. Motorun Server'ını köprü sunucunuza atayın; sayfa, varlıkları ve canlı WebSocket parça (fragment) push'unun tümü, DataSnap REST uç noktalarınızla aynı port üzerinde çalışır.

uses
  sgcWebSocket_Server_WebBrokerBridge,
  sgcHTMX_Engine_Server_WebBrokerBridge, sgcHTMX_Router;

// A DataSnap / WebBroker bridge server
FServer := TsgcWSHTTPWebBrokerBridgeServer.Create(Self);
FServer.Port := 8080;

FEngine := TsgcHTMX_Engine_Server_WebBrokerBridge.Create(Self);
FEngine.Router := FRouter;     // your htmx routes and the page
FEngine.Server := FServer;     // share the DataSnap port
FServer.Active := True;

// push a live HTML fragment to every connected browser
FEngine.BroadcastFragment(BuildStatsFragment);

Motor yalnızca kendi yollarını, sayfayı, varlıkları ve rotalarınızı sahiplenir. Diğer her şey dokunulmadan geçer, böylece /datasnap/* REST ve TWebModule'ünüzde zaten bulunan eylemler tıpkı öncesi gibi çalışmaya devam eder ve sahip olduğunuz herhangi bir OnCommandRequest işleyicisi zincirlenir ve önce çalışır. Aynı desen her üç köprü sunucusunu da kapsar: TsgcHTMX_Engine_Server_WebBrokerBridge, Indy köprüsünü HTTP/1.1 üzerinden ve HTTP/2 köprüsünü sunar; TsgcHTMX_Engine_Server_HTTPAPI_WebBrokerBridge ise HTTP.sys köprüsünü sunar.

Tek arka uç, iki yüz

DataSnap üzerinde barındırmanın güzel sonucu, tek bir sunucu yöntemleri kümesinin çift görev üstlenebilmesidir. TDSServerModule'ünüz, herhangi bir dış istemci için /datasnap/rest adresindeki REST ve JSON API'nizdir ve aynı zamanda sgcHTML sayfalarınızın süreç içinde oluşturulduğu veri kaynağıdır. İş mantığını bir kez yazarsınız ve bundan hem bir makine API'si hem de bir insan web arayüzü elde edersiniz, tek bir sunucuda, tek bir port üzerinde.

Başlamak için üç demo

Ürün, aynı küçük uygulamayı farklı stillerde oluşturan üç demo ile birlikte gelir, böylece projenize uyanı seçebilirsiniz:

Gereksinimler ve kullanılabilirlik

WebBroker motoru Delphi 7'den Delphi 13'e kadar destekler. DataSnap köprü yolu, DataSnap içeren bir Delphi sürümü gerektirir, bu da Enterprise veya Architect'tir. WebBroker ve DataSnap, Delphi ve C++Builder çerçeveleridir, bu yüzden bu barındırma senaryosu bu iki derleyiciye özgüdür. sgcHTML .NET portu ise bunun yerine ASP.NET Core üzerinde barındırılır ve orada aynı sonuca ulaşır.

Burada açıklanan her şey şu anda kullanılabilir. Tam açıklama, bileşen referansı ve kod örnekleri WebBroker & DataSnap sayfasında yer alır.

sgcHTML'i DataSnap sunucunuza bağlamakla ilgili sorular, geri bildirim veya yardım mı gerekiyor? Bize ulaşın. Kodu yazan kişilerden bir yanıt alacaksınız.