WebSockets TMS Sparkle

· Composants

A customer ask si TMS Sparkle et sgcWebSockets can run together, et le answer est yes, il n'y a pas de problem running sgcWebSockets et TMS Sparkle sur le same server. Both peut run utilisant HTTP.SYS server, tu peux run a single HTTP.SYS server et configure endpoints to run avec Sparkle et sgcWebSockets without problems. Basically tu configure in each package qui endpoint va handle.

sgcWebSockets peut run in HTTP.SYS server through HTTP API Server:

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

Voici 2 samples qui show comment sgcWebSockets et TMS Sparkle peut run sur le same HTTP.SYS server.

sgcWebSockets Sample

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 Sample

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. 

Compiled Samples

Follow le instructions below to run le samples:

1. Execute sgcWSServer as Administrator. Will open a WebSocket server, listening on port 2001 et endpoint "/ws"

2. Execute HelloWorldServer. Will open a REST server, listening on port 2001 et endpoing "/rest"

3. Open a websocket connection to ws://127.0.0.1:2001/ws. Tu vas obtenir un message depuis server après connect et si tu envoyer aucun message sera returned by server automatically.

4. Open a http connection to http://127.0.0.1:2001/rest. A simple response depuis REST server sera shown.