TsgcWSHTTPWebBrokerBridgeServer

TsgcWSHTTPWebBrokerBridgeServer utilise TIdHttpWebBrokerBridge comme base de serveur et est utile si vous souhaitez utiliser un seul serveur pour les connexions DataSnap, HTTP et WebSocket.

 

TsgcWSHTTPWebBrokerBridgeServer hérite de TsgcWebSocketHTTPServer, vous pouvez donc référencer ce serveur.

 

Suivez les étapes suivantes pour remplacer TIdHttpWebBrokerBridge par TsgcWSHTTPWebBrokerBridgeServer :

 

1. Créez une nouvelle instance de TsgcWSHTTPWebBrokerBridgeServer.

 

2. Remplacez tous les appels à TIdHttpWebBrokerBridge par TsgcWSHTTPWebBrokerBridgeServer.

 

3. Pour gérer les connexions WebSocket, référez-vous à TsgcWebSocketHTTPServer.

 

Configuration

Les composants Datasnap ne se trouvent que dans le dossier Source ; vous ne les trouverez pas dans les dossiers compilés car ces objets ne sont pas inclus dans le package sgcWebSockets, vous devez donc les créer à l'exécution.

Ajoutez simplement les fichiers requis à votre projet ou définissez votre chemin vers le dossier Source du package sgcWebSockets. Fichiers requis :

 

 

Si le projet utilise IdHTTPWebBrokerBridge, remplacez-le par sgcIdHTTPWebBrokerBridge (applicable uniquement pour l'édition Enterprise).

 

Événements


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;

Équilibreur de charge

Si le serveur se trouve derrière le TsgcWebSocketLoadBalancerServer, vous pouvez rencontrer des problèmes avec CORS ; pour éviter ces problèmes, utilisez le code suivant

 


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;