WebSockets TMS Sparkle

· Componenten

Een klant vroeg of TMS Sparkle en sgcWebSockets samen kunnen draaien. Het antwoord is ja: er is geen probleem om sgcWebSockets en TMS Sparkle op dezelfde server te draaien. Beide kunnen draaien met de HTTP.SYS-server; je kunt één enkele HTTP.SYS-server draaien en endpoints configureren om zonder problemen met Sparkle en sgcWebSockets te draaien. In feite configureer je in elk package welk endpoint het zal afhandelen.

sgcWebSockets kan in een HTTP.SYS-server draaien via HTTP API Server:

https://www.esegece.com/help/sgcWebSockets/#t=Components%2FTsgcWebSocketServer_HTTPAPI.htm

Vind hieronder 2 voorbeelden die laten zien hoe sgcWebSockets en TMS Sparkle op dezelfde HTTP.SYS-server kunnen draaien.

sgcWebSockets-voorbeeld

program sgcWSServer;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils,
  sgcWebSocket, sgcWebSocket_Classes,
  sgcWebSocket_Server_HTTPAPI;
type
  TsgcServerClass = class
    public
      procedure OnConnectEvent(Connection: TsgcWSConnection);
      procedure OnMessageEvent(Connection: TsgcWSConnection; const Text: String);
  end;
procedure TsgcServerClass.OnConnectEvent(Connection: TsgcWSConnection);
begin
   Connection.WriteData('Hello From Server.');
end;
procedure TsgcServerClass.OnMessageEvent(Connection: TsgcWSConnection; const
    Text: String);
begin
  Connection.WriteData(Text);
end;
var
  oServer: TsgcWebSocketServer_HTTPAPI;
  oConnection: TsgcServerClass;
begin
  try
    oServer := TsgcWebSocketServer_HTTPAPI.Create(nil);
    oConnection := TsgcServerClass.Create;
    Try
      oServer.Bindings.NewBinding('127.0.0.1', 2001, '/ws/');
      oServer.OnConnect := oConnection.OnConnectEvent;
      oServer.OnMessage := oConnection.OnMessageEvent;
      oServer.Active := True;
      WriteLn('sgcWebSockets Server started at ws://127.0.0.1:2001/ws');
      while oServer.Active do
        Sleep(10);
    Finally
      oConnection.Free;
      oServer.Free;
    End;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

TMS Sparkle-voorbeeld

program HelloWorldServer;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  Sparkle.HttpServer.Context,
  Sparkle.HttpServer.Module,
  Sparkle.HttpSys.Server;
type
  THelloWorldModule = class(THttpServerModule)
    public procedure ProcessRequest(const C: THttpServerContext); override;
  end;
procedure THelloWorldModule.ProcessRequest(const C: THttpServerContext);
begin
  C.Response.StatusCode := 200;
  C.Response.ContentType := 'text/plain';
  C.Response.Close(TEncoding.UTF8.GetBytes('Hello, World!'));
end;
const
  ServerUrl = 'http://127.0.0.1:2001/rest';
var
  Server: THttpSysServer;
begin
  Server := THttpSysServer.Create;
  try
    Server.AddModule(THelloWorldModule.Create(ServerUrl));
    Server.Start;
    WriteLn('Hello World Server started at ' + ServerUrl);
    WriteLn('Press Enter to stop');
    ReadLn;
  finally
    Server.Free;
  end;
end. 

Gecompileerde voorbeelden

Volg de onderstaande instructies om de voorbeelden uit te voeren:

1. Voer sgcWSServer als administrator uit. Hiermee wordt een WebSocket-server geopend die luistert op poort 2001 en endpoint "/ws"

2. Voer HelloWorldServer uit. Hiermee wordt een REST-server geopend die luistert op poort 2001 en endpoint "/rest"

3. Open een WebSocket-verbinding naar ws://127.0.0.1:2001/ws. Je krijgt na het verbinden een bericht van de server, en als je een bericht verstuurt, wordt dit automatisch door de server teruggestuurd.

4. Open een HTTP-verbinding naar http://127.0.0.1:2001/rest. Er wordt een eenvoudig antwoord van de REST-server getoond.