TsgcWSHTTPWebBrokerBridgeServer は TIdHttpWebBrokerBridge をサーバーベースとして使用し、DataSnap、HTTP、WebSocket 接続に単一のサーバーを使用する場合に役立ちます。
TsgcWSHTTPWebBrokerBridgeServer は TsgcWebSocketHTTPServer から継承されるため、このサーバーを参照できます。
TIdHttpWebBrokerBridge を TsgcWSHTTPWebBrokerBridgeServer に置き換えるには次の手順に従ってください:
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;