WebBroker & DataSnap Üzerinde sgcHTML | sgcHTML | eSeGeCe

sgcHTML, WebBroker & DataSnap Üzerinde

sgcHTML, sgcWebSockets sunucusuna bağlı değildir. Bileşen ve düğüm katmanı, herhangi bir taşımadan bağımsız düz HTML dizeleri üretir; böylece sgcWebSockets HTTP sunucusu için oluşturduğunuz aynı sayfalar bir Embarcadero WebBroker uygulamasından ve bir DataSnap sunucusundan sunulabilir. Bir motor bileşenini web modülünüze bırakın ya da bir köprü sunucusuna atayın; DataSnap REST API'niz ve sgcHTML web arayüzünüz tek bir portta yan yana çalışsın.

Standart IWebDispatch
Tek portta DataSnap
ISAPI / Apache / CGI / HTTP.sys
HTTP/1.1 & HTTP/2
Delphi 7'den 13'e

Tasarım Gereği Barındırıcıdan Bağımsız

sgcHTML, sunucu tarafında çalışan bir HTML oluşturucudur. Her bileşen ve her düğüm, standart Bootstrap 5 işaretlemesini düz bir dize olarak üretir ve bunu ileten taşımaya hiçbir bağımlılığı yoktur. Delphi ya da C++ Builder kodunuzun bir HTTP yanıtı yazabildiği her yerde, bir sgcHTML sayfası sunabilir. sgcWebSockets sunucusu için oluşturduğunuz aynı sayfanın, değiştirilmeden bir WebBroker uygulamasının ya da bir DataSnap sunucusunun içinde çalışmasını sağlayan da budur.

Düz HTML dizeleri

Bileşen katmanı ve düğüm katmanının ikisi de Bootstrap 5 işaretlemesinden oluşan bir string'e dönüşür. Bu çıktının hiçbir yeri sgcWebSockets sunucusunu varsaymaz; böylece onu kendi işleyicinizden herhangi bir TWebResponse'a yazabilirsiniz.

Standart IWebDispatch

WebBroker motoru, standart IWebDispatch sözleşmesini uygular. Otomatik dağıtım yapan diğer bileşenler gibi normal WebBroker dağıtım zincirine takılır; böylece mevcut eylemleriniz ve dağıtıcılarınızla bir arada çalışır.

WebBroker'ın çalıştığı her yerde çalışır

Sıradan bir WebBroker olduğundan, bir sgcHTML sayfası bağımsız bir TIdHTTPWebBrokerBridge'den, bir ISAPI modülünden, bir Apache modülünden, bir CGI çalıştırılabilir dosyasından ya da bir HTTP.sys köprü sunucusundan sunulabilir. Tek bir kod tabanı, birçok dağıtım biçimi.

Uygulamanıza Uygun Barındırıcıyı Seçin

sgcHTML'i sgcWebSockets sunucusunun dışında sunmanın iki yolu vardır. Düz WebBroker, CGI'den ISAPI'ye en geniş erişimi sağlar. Köprü sunucusu yolu ise canlı WebSocket iletimi ekler ve DataSnap ile bir portu paylaşır.

1. Herhangi bir WebBroker uygulaması

TsgcHTMX_Engine_Server_WebBroker, standart IWebDispatch'i uygular. Web modülünü sahibi yaparak onu TWebModule'ünüze bırakın ya da eylem listesinin önce çalışmasını istediğinizde DispatchRequest'ini bir TWebActionItem'dan çağırın. Her iki durumda da sgcHTML sayfasını, yerleşik CSS ve JavaScript varlıklarını ve Router'ında kaydettiğiniz HTMX HTTP yollarını sunar. Bağımsız bir TIdHTTPWebBrokerBridge, bir ISAPI modülü, bir Apache modülü ve CGI üzerinde çalışır.

Buradaki etkileşim, düz HTTP gidiş-dönüşleri üzerinden standart HTMX olduğundan WebSocket gerekmez. Yalnızca işaretleme istediğiniz barındırıcılar ve sayfalar için, hiç HTMX içermeyen, tam sayfa gezinme ve standart form gönderimlerinin olduğu klasik bir düz HTML modu da desteklenir. Planlamanız gereken bir uyarı: düz WebBroker, CGI ya da ISAPI altında WebSocket iletimi yoktur; çünkü istek ve yanıt yaşam döngüsü soketin sahibidir. Bu yolda canlı güncellemelere ihtiyaç duyduğunuzda HTMX yoklaması kullanın ya da aşağıdaki köprü sunucularına geçin.

2. DataSnap ve köprü sunucuları, gerçek zamanlı

TsgcHTMX_Engine_Server_WebBrokerBridge, sgcWebSockets WebBroker köprü sunucularını hedefler: HTTP/1.1 üzerinden TsgcWSHTTPWebBrokerBridgeServer ve HTTP/2 üzerinden TsgcWSHTTP2WebBrokerBridgeServer. TsgcHTMX_Engine_Server_HTTPAPI_WebBrokerBridge ise HTTP.sys üzerindeki TsgcWSServer_HTTPAPI_WebBrokerBridge'i hedefler. Motorun Server özelliğini köprü sunucunuza atarsınız; sgcHTML sayfası, varlıkları ve BroadcastFragment aracılığıyla canlı WebSocket parça iletimi, DataSnap REST uç noktalarınızla aynı portta çalışır.

Motor yalnızca kendi yollarını sahiplenir; böylece /datasnap/* REST çağrıları ve mevcut TWebModule eylemleriniz tam olarak eskisi gibi çalışmaya devam eder. Halihazırda atadığınız her OnCommandRequest işleyicisi zincire eklenir ve önce sizin işleyiciniz çalışır; böylece oluşturduğunuz hiçbir şey devralınmaz.

DataSnap Yöntemleriniz Hem API Hem de Sayfa Verisidir

Aynı DataSnap sunucu yöntemleri aynı anda iki kitleye hizmet edebilir. Bir TDSServerModule, harici istemciler için /datasnap/rest/... adresindeki REST ve JSON API'nizdir ve aynı zamanda sgcHTML sayfalarınızın aynı sunucuda, süreç içinde işlediği veri kaynağıdır. İş mantığını bir kez yazar, ardından ona tek bir paylaşılan sınıf üzerinden bir tarayıcı parçasından ve harici bir REST çağıranından erişirsiniz.

REST / JSON API

Harici istemciler, sunucu yöntemlerinizi standart bir DataSnap WebBroker sunucusunun sunduğu şekilde tam olarak /datasnap/rest/TServerMethods/<Method>/... adresinde çağırır. sgcHTML motoru bu yollara dokunmaz.

Sunucuda işlenen sayfa verisi

Yol ve eylem işleyicileriniz, tam olarak aynı sunucu yöntemi sınıfını süreç içinde çağırır, sonucu okur ve sgcHTML bileşenlerine aktarır. Sayfa, REST API'nizi yanıtlayan özdeş arka uçtan işlenir.

Canlı iletim, aynı port

Köprü sunucusu yolunda BroadcastFragment, DataSnap uç noktalarınızla aynı port ve süreç üzerinde, bağlı her tarayıcıya WebSocket üzerinden yeni HTML iletir. Panolar ve izleme ekranları verileriniz değiştiği an güncellenir.

Motoru Barındırıcınıza Bağlayın

Motoru oluşturun, ona bir yönlendirici ve bir sayfa verin ve DataSnap ile gerçek zamanlı yol için bir köprü sunucusuna atayın ya da düz WebBroker yolu için web modülüne bırakın.

uses
  Web.HTTPApp, sgcWebSocket_Server_WebBrokerBridge,
  sgcHTMX_Engine_Server_WebBrokerBridge, sgcHTMX_Router;

// === DataSnap + realtime: sgcHTML on the SAME port as the DataSnap REST API ===
FServer := TsgcWSHTTPWebBrokerBridgeServer.Create(Self);
FServer.Port := 8080;

// a router holds the HTMX fragment routes (GET / POST round-trips)
FRouter := TsgcHTMX_Router.Create(Self);
oRoute := FRouter.Routes.Add;
oRoute.Path := '/dashboard/refresh';
oRoute.OnRoute := OnDashboardRefresh;

// the engine claims its own page, assets and routes; DataSnap keeps /datasnap/*
FEngine := TsgcHTMX_Engine_Server_WebBrokerBridge.Create(Self);
FEngine.Router := FRouter;
FEngine.Template.Title := 'DataSnap Realtime Dashboard';
FEngine.Template.BodyContent := BuildDashboard;   // page built from components
FEngine.Server := FServer;                         // share the DataSnap port

FServer.Active := True;

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

// === Plain WebBroker: drop the engine on the TWebModule (standard IWebDispatch) ===
FEngine := TsgcHTMX_Engine_Server_WebBroker.Create(WebModule1);  // Owner = WebModule
FEngine.Router := FRouter;
// includes: sgcWebSocket_Server_WebBrokerBridge.hpp,
//           sgcHTMX_Engine_Server_WebBrokerBridge.hpp, sgcHTMX_Router.hpp

// === DataSnap + realtime: sgcHTML on the SAME port as the DataSnap REST API ===
FServer = new TsgcWSHTTPWebBrokerBridgeServer(this);
FServer->Port = 8080;

// a router holds the HTMX fragment routes (GET / POST round-trips)
FRouter = new TsgcHTMX_Router(this);
TsgcHTMX_Route *oRoute = FRouter->Routes->Add();
oRoute->Path = "/dashboard/refresh";
oRoute->OnRoute = OnDashboardRefresh;

// the engine claims its own page, assets and routes; DataSnap keeps /datasnap/*
FEngine = new TsgcHTMX_Engine_Server_WebBrokerBridge(this);
FEngine->Router = FRouter;
FEngine->Template->Title = "DataSnap Realtime Dashboard";
FEngine->Template->BodyContent = BuildDashboard();   // page built from components
FEngine->Server = FServer;                           // share the DataSnap port

FServer->Active = true;

// push a live HTML fragment to every connected browser over WebSockets
FEngine->BroadcastFragment(BuildStatsFragment());

// === Plain WebBroker: drop the engine on the TWebModule (standard IWebDispatch) ===
FEngine = new TsgcHTMX_Engine_Server_WebBroker(WebModule1);  // Owner = WebModule
FEngine->Router = FRouter;
// WebBroker and DataSnap are Delphi and C++ Builder (VCL) frameworks.
// .NET has no WebBroker and no DataSnap, so this hosting path is specific
// to Delphi and C++ Builder. The sgcHTML .NET port hosts on ASP.NET Core.

using esegece.sgcHTML;
using esegece.sgcHTML.AspNetCore;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// the sgcHTML.AspNetCore adapter maps the same component-built page
// onto an ASP.NET Core endpoint (Kestrel / IIS), the .NET equivalent
// of the WebBroker host used in Delphi and C++ Builder.
app.UseSgcHtml(engine =>
{
    engine.MapPage("/", () => BuildDashboard());
});

app.Run();

Ürünle Birlikte Üç Demo Gelir

Yukarıdaki yolların her biri, sgcWebSockets dağıtımında eksiksiz ve çalıştırılabilir bir demodur; böylece halihazırda derlenip dağıtım yapan bir projeden başlayabilirsiniz.

WebBroker + DataSnap, HTMX

Demos\60.HTML\11.WebBroker, DataSnap arka ucu ve tam HTMX etkileşimi olan, WebBroker üzerinde çalışan bir mini CRM'dir; motorun, DataSnap REST'in ve standart WebModule eylemlerinin tek bir web modülünü paylaştığını gösterir.

Klasik düz HTML, HTMX yok

Demos\60.HTML\12.WebBrokerHTML, aynı türden sayfaları klasik düz HTML modunda, bir DataSnap arka ucu üzerinden tam sayfa gezinme ve standart form gönderimleriyle, hiç HTMX olmadan sunar.

Tek portta gerçek zamanlı pano

Demos\40.DataSnap\Server_Indy_HTTP_HTML, tek bir portta DataSnap'in yanında canlı bir sgcHTML panosu çalıştırır ve istatistik, grafik ve günlük parçalarını WebSocket üzerinden her tarayıcıya iletir.

Neye İhtiyacınız Var

Motor birimleri sgcHTML ile birlikte gelir; böylece her iki yol için de ekstra kurulacak bir şey yoktur.

Düz WebBroker yolu

TsgcHTMX_Engine_Server_WebBroker, Delphi 7'den Delphi 13'e kadar destekler. WebBroker her RAD Studio sürümünde mevcuttur ve aynı motor C++ Builder'da da mevcuttur.

DataSnap köprü yolu

DataSnap köprü sunucuları ve /datasnap/* REST katmanı, DataSnap içeren bir Delphi sürümü gerektirir; yani Enterprise ya da Architect. Bağlantının sgcHTML tarafı her iki yolda da aynıdır.

En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

WebBroker ya da DataSnap Sunucunuza Bir Web Arayüzü Ekleyin

Gerçek zamanlı Bootstrap 5 sayfalarını, halihazırda çalıştırdığınız WebBroker uygulamasından ya da DataSnap sunucusundan, sgcHTML'in her yerinde kullandığınız aynı bileşen API'siyle sunun.