TsgcWSHTTPWebBrokerBridgeServer

TsgcWSHTTPWebBrokerBridgeServer korzysta z TIdHttpWebBrokerBridge jako podstawy serwera i jest przydatny, gdy wymagane jest użycie jednego serwera do obsługi połączeń DataSnap, HTTP i WebSocket.

 

TsgcWSHTTPWebBrokerBridgeServer dziedziczy po TsgcWebSocketHTTPServer, więc można odwoływać się do tego serwera.

 

Wykonaj następujące kroki, aby zastąpić TIdHttpWebBrokerBridge przez TsgcWSHTTPWebBrokerBridgeServer:

 

1. Utwórz nową instancję TsgcWSHTTPWebBrokerBridgeServer.

 

2. Zastąp wszystkie wywołania TIdHttpWebBrokerBridge przez TsgcWSHTTPWebBrokerBridgeServer.

 

3. Aby obsługiwać połączenia WebSocket, należy odwołać się do TsgcWebSocketHTTPServer.

 

Konfiguracja

Komponenty Datasnap znajdują się wyłącznie w folderze Source; nie znajdziesz ich w skompilowanych folderach, ponieważ te obiekty nie są dołączone do pakietu sgcWebSockets, dlatego należy je tworzyć w czasie wykonania.

Wystarczy dodać wymagane pliki do projektu lub ustawić ścieżkę do folderu Source pakietu sgcWebSockets. Wymagane pliki:

 

 

Jeśli projekt korzysta z IdHTTPWebBrokerBridge, należy zastąpić go komponentem sgcIdHTTPWebBrokerBridge (dotyczy wyłącznie edycji Enterprise).

 

Zdarzenia


FServer := TsgcWSHTTPWebBrokerBridgeServer.Create(Self);
FServer.OnCommandRequest := OnCommandRequestEvent;
FServer.OnCommandGet := OnCommandGetevent;
  
procedure OnCommandRequestEvent(AThread: TIdContext; ARequestInfo: TIdHTTPRequestInfo;
AResponseInfo: TIdHTTPResponseInfo; var aHandled: Boolean);
begin
  if ARequestInfo.Document = '/test.html' then
    aHandled := True;
end;
 
procedure OnCommandGetevent(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo;
AResponseInfo: TIdHTTPResponseInfo);
begin
  if ARequestInfo.Document = '/test.html' then
  begin
    AResponseInfo.ResponseNo := 200;
    AResponseInfo.ContentText := 'hello all';
  end;
end;

Równoważnik obciążenia

Jeśli serwer znajduje się za TsgcWebSocketLoadBalancerServer, mogą wystąpić problemy z CORS. Aby ich uniknąć, należy użyć poniższego kodu.

 


procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.SetCustomHeader('Access-Control-Allow-Origin','*');        
  if Trim(Request.GetFieldByName('Access-Control-Request-Headers')) <> '' then 
  begin 
    Response.SetCustomHeader('Access-Control-Allow-Headers', Request.GetFieldByName('Access-Control-Request-Headers'));        
    Handled := True;
  end;
  if FServerFunctionInvokerAction <> nil then
    FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker;
end;