TsgcWSHTTPWebBrokerBridgeServer

TsgcWSHTTPWebBrokerBridgeServerTIdHttpWebBrokerBridge をサーバーベースとして使用し、DataSnap、HTTP、WebSocket 接続に単一のサーバーを使用する場合に役立ちます。

 

TsgcWSHTTPWebBrokerBridgeServerTsgcWebSocketHTTPServer から継承されるため、このサーバーを参照できます。

 

TIdHttpWebBrokerBridgeTsgcWSHTTPWebBrokerBridgeServer に置き換えるには次の手順に従ってください:

 

1. TsgcWSHTTPWebBrokerBridgeServer の新しいインスタンスを作成してください。

 

2. TIdHttpWebBrokerBridge へのすべての呼び出しを TsgcWSHTTPWebBrokerBridgeServer に置き換えます。

 

3. WebSocket 接続を処理するには TsgcWebSocketHTTPServer を参照してください。

 

設定

Datasnap コンポーネントはソースフォルダーにのみ配置されています。これらのオブジェクトは sgcWebSockets パッケージに含まれていないため、コンパイル済みフォルダーには見つかりません。実行時に作成する必要があります。

必要なファイルをプロジェクトに追加するか、sgcWebSocketsパッケージのSourceフォルダーへのパスを設定するだけです。必要なファイル:

 

 

プロジェクトが IdHTTPWebBrokerBridge を使用している場合は sgcIdHTTPWebBrokerBridge に変更します (Enterprise Edition のみ適用)。

 

イベント


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;

ロードバランサー

サーバーが TsgcWebSocketLoadBalancerServer の背後にある場合、CORS の問題が発生する可能性があります。これらの問題を回避するには、次のコードを使用してください。

 


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;