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.
