sgcWebSockets beş dakikada

Kitaplığı kurdunuz ve palet görünüyor. Bu sayfa sizi buradan, bağlantı kabul eden bir sunucuya ve mesaj gönderip yanıtı okuyan bir istemciye götürür. Aşağıdaki her şey indirmenin içinde gelen bir demodan alınmıştır, bu nedenle yazmak yerine projeyi açabilirsiniz.

Delphi 7'den RAD Studio 13'e
Windows, Linux, macOS, iOS, Android
İstemci Standard'dan, sunucu Professional'dan itibaren

İlk örnek için gerekenler

İki görsel olmayan bileşen, uses yan tümcesinde bir unit ve olay işleyicisi parametre türleri için bir ek unit.

İstemci bileşeni

TsgcWebSocketClient, sgcWebSocket.pas içinde bildirilir ve SGC WebSockets palet sayfasına kaydedilir. Sırasıyla Host, Port ve ardından Active değerini ayarlayın.

Sunucu bileşeni

TsgcWebSocketServer, aynı unit, aynı palet sayfası. Önce Port, ardından Active değerini ayarlayın. Dinler, el sıkışmayı yükseltir ve OnConnect olayını tetikler.

İkinci unit

Her olay size sgcWebSocket_Classes.pas içinde bulunan bir TsgcWSConnection verir. Demolar uses sgcWebSocket, sgcWebSocket_Classes; yazar, siz de öyle yapmalısınız.

Platformlar

Hiçbir unit platform koruması taşımaz ve her iki bileşen de ComponentPlatforms(0) ile kaydedilir, dolayısıyla VCL, FMX, konsol ve servis hedeflerinin hepsi derlenir. Pakette bir FireMonkey istemci demosu da bulunur.

Gereksinimler ve sürümler

Sürüm sütunu, kodu gerçekten kısıtlayan tanımdır; yanında Source/sgcVer.inc içinde bulunduğu satır yer alır.

Konu Değer
IDE Delphi 7'den RAD Studio 13'e ve C++Builder 2007'den 13'e kadar. Packages\ altında her IDE sürümü için bir paket grubu bulunur.
Uses yan tümcesi Bileşenler için sgcWebSocket, TsgcWSConnection için sgcWebSocket_Classes.
İstemci sürümü TsgcWebSocketClient, {$IFDEF SGC_WS_CLIENT} içine sarılmıştır. SGC_WS_CLIENT, 675. satırdan 724. satıra kadar uzanan {$IFDEF SGC_EDT_STD} bloğunun içinde, 697. satırda tanımlanır. Yani Standard ve üzeri.
Sunucu sürümü TsgcWebSocketServer doğrudan {$IFDEF SGC_EDT_PRO} içine sarılmıştır ve sgcWebSocket_Reg.pas içindeki palet kaydı da aynı korumanın içindedir. Professional özellik bloğu 727. satırdan 758. satıra kadar uzanır. Yani Professional ve üzeri. Standard lisansı size istemciyi verir, sunucuyu vermez.
Palet sayfası 852. satırda tanımlanan {$IFDEF SGC_PACK_WEBSOCKETS} altında kaydedilir.
Platformlar sgcWebSocket.pas, sgcWebSocket_Client.pas veya sgcWebSocket_Server.pas içinde unit kapsamında bir platform koruması yoktur. Windows, Windows unit'ini yalnızca koşullu olarak ekler, başka bir şey yapmaz.

Hangi sürümü kullandığınızdan emin değil misiniz? Source/sgcVer.inc dosyasını açın ve ilk beş satıra bakın. Oradaki SGC_EDT_* tanımları birikimlidir; All-Access hepsini tanımlar, Standard ise yalnızca ilk ikisini.

Kurun ve paleti doğrulayın

Zip dosyasından bırakabileceğiniz bir bileşene giden beş adım. Tasarım zamanı paketini kurmadan önce çalışma zamanı paketini derleyin, çünkü ikincisi birincisine başvurur.

1. Zip dosyasını açın

İndirdiğiniz dosyayı seçtiğiniz bir klasöre açın. Bu sayfanın geri kalanı bu klasörü {$DIR} olarak adlandırır. Source\, Packages\, Demos\ ve lib*\ klasörlerinin hepsi bunun altındadır.

2. Kitaplık yolu

Tools, Options, Library. {$DIR}\source yolunu ve IDE'nize uyan klasörü ekleyin; örneğin RAD Studio 13'te {$DIR}\libD13\$(Platform), 12'de {$DIR}\libD12\$(Platform).

3. Paketleri derleyin

IDE sürümünüz için {$DIR}\Packages\sgcWebSocketsD13.groupproj dosyasını açın. Önce sgcWebSocketsD13.dpk dosyasını derleyin, ardından dclsgcWebSocketsD13.dpk dosyasını kurun. C++Builder aynı klasördeki .cbproj dosyalarını kullanır.

4. Paleti kontrol edin

SGC WebSockets adlı yeni bir sayfa görünür. Standard sürümde TsgcWebSocketClient bulunur. Professional ve üzerinde ayrıca TsgcWebSocketServer, TsgcWebSocketHTTPServer, TsgcWebSocketProxyServer ve TsgcWebSocketLoadBalancerServer da yer alır.

5. Bir demo açın

Herhangi bir şey yazmadan önce {$DIR}\Demos\01.WebSocket_Quick_Start\01.Server_and_Client_Chat klasörünü açın. Kitaplıktaki en küçük çalışan çifttir ve aşağıdaki kod ondan alınmıştır.

Bir sunucu ve bir istemci, yaklaşık yirmi satırda

Sunucuyu başlatın, istemciyi başlatın, bir dize gönderin. Sunucu sekmesi bir portu dinler; istemci sekmesi ona bağlanır ve tek bir mesaj yazar.

uServerChat.pas
uses
  Classes, SysUtils,
  // sgc
  sgcWebSocket, sgcWebSocket_Classes;

procedure TfrmServerChat.btnStartClick(Sender: TObject);
begin
  WSServer.Port := 5418;
  WSServer.Active := True;
  memoLog.Lines.Add('#started');
end;

procedure TfrmServerChat.WSServerConnect(Connection: TsgcWSConnection);
begin
  memoLog.Lines.Add('Connected: ' + Connection.IP);
end;

procedure TfrmServerChat.WSServerDisconnect(Connection: TsgcWSConnection;
  Code: Integer);
begin
  memoLog.Lines.Add('Disconnected (' + IntToStr(Code) + '): ' + Connection.IP);
end;

procedure TfrmServerChat.WSServerMessage(Connection: TsgcWSConnection;
  const Text: string);
begin
  memoLog.Lines.Add(Text);
  // send it straight back, so the client has something to read
  Connection.WriteData('echo: ' + Text);
end;

Forma TsgcWebSocketServer bileşenini bırakın, adını WSServer yapın ve dört işleyiciyi Object Inspector üzerinden IDE'nin oluşturmasına izin verin. Connection.IP ve Connection.WriteData ikisi de TsgcWSConnection sınıfından gelir; sgcWebSocket_Classes unit'inin uses yan tümcesinde olmasının nedeni budur.

uClientChat.pas
uses
  Classes, SysUtils,
  // sgc
  sgcWebSocket, sgcWebSocket_Classes;

procedure TfrmClientChat.btnStartClick(Sender: TObject);
begin
  WSClient.Host := 'localhost';
  WSClient.Port := 5418;
  WSClient.TLS := False;
  WSClient.Active := True;
end;

procedure TfrmClientChat.btnSendClick(Sender: TObject);
begin
  if WSClient.Active then
    WSClient.WriteData('Hello from Delphi')
  else
    raise Exception.Create('Not connected');
end;

procedure TfrmClientChat.WSClientConnect(Connection: TsgcWSConnection);
begin
  memoLog.Lines.Add('#connected');
end;

procedure TfrmClientChat.WSClientMessage(Connection: TsgcWSConnection;
  const Text: string);
begin
  memoLog.Lines.Add(Text);
end;

Önce sunucu projesini, ardından bunu çalıştırın. İstemci günlüğünde #connected görünür ve echo: Hello from Delphi yanıtı OnMessage üzerinden geri gelir. Bu gidiş dönüş, hızlı başlangıcın tamamıdır.

uConsole.pas
program WSConsoleClient;

{$APPTYPE CONSOLE}

uses
  Classes, SysUtils,
  // sgc
  sgcWebSocket, sgcWebSocket_Classes;

type
  TChatHandler = class
    procedure DoConnect(Connection: TsgcWSConnection);
    procedure DoMessage(Connection: TsgcWSConnection; const Text: string);
  end;

procedure TChatHandler.DoConnect(Connection: TsgcWSConnection);
begin
  Writeln('#connected');
end;

procedure TChatHandler.DoMessage(Connection: TsgcWSConnection;
  const Text: string);
begin
  Writeln('Server says: ', Text);
end;

var
  oClient: TsgcWebSocketClient;
  oHandler: TChatHandler;
begin
  oHandler := TChatHandler.Create;
  oClient := TsgcWebSocketClient.Create(nil);
  try
    oClient.Host := 'localhost';
    oClient.Port := 5418;
    oClient.WatchDog.Enabled := True;   // reconnect on its own

    // assign the handlers BEFORE Active, or the first
    // OnConnect can fire with nothing attached
    oClient.OnConnect := oHandler.DoConnect;
    oClient.OnMessage := oHandler.DoMessage;

    oClient.Active := True;
    oClient.WriteData('Hello from Delphi');
    Readln;
  finally
    oClient.Free;
    oHandler.Free;
  end;
end.

İstemci kendi iş parçacığında çalışır, bu nedenle bir konsol programının ana iş parçacığını canlı tutması gerekir. Readln bunun içindir.

Sunucu ve istemci sekmeleri, demodaki onay kutusu ve düzenleme kutusu altyapısı çıkarılmış hâliyle, paketle gelen Demos\01.WebSocket_Quick_Start\01.Server_and_Client_Chat demosudur. Üçüncü sekme, forma bırakılan bileşenler yerine çalışma zamanında oluşturulan bileşenlere karşı yazılmış aynı çağrılardır.

Gidiş dönüşü kanıtlayın

Dört olay ilk çalıştırma hakkında bilmeniz gereken her şeyi söyler ve devam etmeden önce dördünü de bağlamak istersiniz.

Active

Sunucuda Active := True ya başarılı olur ya da hata oluşturur. Port kullanımdaysa bunu üç adım sonra değil, burada öğrenirsiniz.

OnConnect

procedure(Connection: TsgcWSConnection). Her iki tarafta da tetiklenir. Sunucuda Connection.IP kimin bağlandığını söyler; istemcide ise el sıkışmanın yükseltildiğinin kanıtıdır.

OnMessage

procedure(Connection: TsgcWSConnection; const Text: string). İstemciye geri dönen yankı, gidiş dönüşün uçtan uca kanıtlanmasıdır.

OnError ve OnException

procedure(Connection: TsgcWSConnection; const Error: string) ve procedure(Connection: TsgcWSConnection; E: Exception). İkisini de bağlayın. Bunlar olmadan bir hata sessiz kalır ve hiçbir şey olmamış gibi görünür.

İlk seferde genellikle ne ters gider

İlk çalıştırma sorunlarının neredeyse hepsi şu altısından biridir.

TsgcWebSocketServer paletde yok

Sunucu sınıfı yalnızca SGC_EDT_PRO tanımlıyken, sgcWebSocket.pas dosyasının 130. satırında derlenir ve yalnızca aynı korumanın içinde kaydedilir. Standard sürümde istemci vardır, sunucu yoktur. Bu bir lisanslama konusudur, bozuk bir kurulum değildir.

Tanımsız tanımlayıcı TsgcWSConnection

Bileşenler sgcWebSocket içinde, bağlantı nesnesi ise sgcWebSocket_Classes içinde bulunur. İkinci unit'i uses yan tümcesine ekleyin. Paketle gelen her demoda ikisi de vardır.

İstemci bağlanıyor, sonra düşüyor

Düşen bir bağlantının kendiliğinden yeniden bağlanması için WatchDog.Enabled := True ayarlayın ve OnError ile OnException olaylarını işleyin. İşleyicisiz sessiz bir bağlantı kopması, hiçbir şey olmamış gibi görünür.

Sunucuya hiçbir şey ulaşmıyor

Yazmadan önce istemcinin gerçekten ayakta olduğunu kontrol edin. Etkin olmayan bir istemcide WriteData işe yarar bir şey yapmaz; demonun göndermeden önce if WSClient.Active then koşulunu sınamasının nedeni budur.

Port zaten kullanımda

Sunucunun başka bir örneği ya da başka bir program portu hâlâ elinde tutuyor. Onu durdurun veya sunucuyu boş bir porta taşıyın. Demo varsayılanları 5416 ve 5418'dir.

TLS Linux'ta veya mobilde başarısız oluyor

Bir wss:// bağlantısı çalışan bir TLS arka ucu gerektirir. TLSOptions.IOHandler üzerinden birini seçin: her yerde OpenSSL, dağıtılacak DLL gerektirmeyen Windows'ta SChannel veya Enterprise sürümündeki yerel Apple ve Android işleyicileri.

İnsanlar ilk mesajdan sonra nereye gidiyor

Sohbet çifti taban seviyedir. Bunlar işin genellikle gittiği dört yöndür ve dördü de aynı kitaplıkta bulunur.

Gerçek bir protokol konuşun

Aynı istemci MQTT, AMQP, STOMP, Kafka ve WAMP alt protokol bileşenlerini taşır. Birini bırakın, Client özelliğini TsgcWebSocketClient bileşeninize yöneltin, bir aracıya bağlanmış olursunuz.

sgcMQ hızlı başlangıç ve protokollere genel bakış

WebSocket'in yanı sıra HTTP de sunun

TsgcWebSocketHTTPServer, sıradan HTTP isteklerini ve WebSocket yükseltmelerini aynı portta yanıtlar; tarayıcının bir soket açmadan önce bir sayfa alması gerektiğinde istediğiniz budur.

HTTP bileşenleri

Tek sürecin ötesine ölçeklendirin

Enterprise sürümü kümelemeyi, bir yük dengeleyici sunucusunu ve bir proxy sunucusunu ekler; böylece tek bir mantıksal uç nokta birkaç sunucu sürecinin önünde durabilir.

Küme başvurusu ve yük dengeleyici başvurusu

Yayına çıkmadan önce sağlamlaştırın

Hız sınırlama, circuit breaker, API anahtarı yöneticisi ve güvenlik duvarı bileşeni, zaten sahip olduğunuz sunucuya eklenir.

Rate limiter, circuit breaker ve güvenlik duvarı

Başvuru, demolar ve belgeler

Başvuru sayfaları her özelliği ve olayı belgelendirir. Demo projeleri indirmenizin içinde, Demos\01.WebSocket_Quick_Start altındadır.

Başvuru, WebSocket istemcisi TsgcWebSocketClient üzerindeki her özellik, metot ve olay.
Başvuru, WebSocket sunucusu TsgcWebSocketServer üzerinde bağlamalar, kimlik doğrulama, yayın ve bağlantı yönetimi.
Çevrimiçi yardım, TsgcWebSocketClient Oluşturulan bileşen başvurusu, her zaman güncel sürümle uyumludur.
Hangi sürüme ihtiyacım var Standard, Professional, Enterprise ve All-Access sürümlerinin her birinin hangi özellikleri açtığı, özellik özellik.
Denemeyi indirin Üretimle aynı yükleyici, süre sınırlı, IDE sürümü başına bir tane.
Kullanıcı kılavuzu (PDF) Kitaplıktaki her bileşeni kapsayan tam kılavuz.

İlgili okumalar: WebSocket'lerin gerçekte ne olduğu, istemci bağlanma ve watchdog olayları ve bir WebSocket sunucusunu güvenceye alma. Her ürünün kendi hızlı başlangıcı vardır ve başlarken sayfasında listelenir.

sgcWebSockets hızlı başlangıç soruları

sgcWebSocket size TsgcWebSocketClient ve TsgcWebSocketServer bileşenlerini verir. Ayrıca sgcWebSocket_Classes unit'ini de ekleyin, çünkü her olay size bir TsgcWSConnection verir ve bu tür orada bildirilmiştir. Paketle gelen demolar uses sgcWebSocket, sgcWebSocket_Classes; yazar ve sunucu demosu ayrıca sgcWebSocket_Server ekler.
Sunucu sınıfı {$IFDEF SGC_EDT_PRO} içinde derlenir ve sgcWebSocket_Reg.pas içindeki palet kaydı da aynı korumanın içinde yer alır. SGC_EDT_PRO, sgcVer.inc dosyasının 727 ile 758. satırları arasındaki Professional özellik bloğunu açar. Standard sürüm yalnızca istemciyi derler. İstemci tanımı olan SGC_WS_CLIENT, Standard bloğunun içinde, 675 ile 724. satırlar arasında, 697. satırdadır.
Bunlar sgcWebSocket_Classes.pas dosyasından gelir. OnConnect, procedure(Connection: TsgcWSConnection) biçimindedir. OnDisconnect, procedure(Connection: TsgcWSConnection; Code: Integer) biçimindedir. OnMessage, procedure(Connection: TsgcWSConnection; const Text: string) biçimindedir. OnError, procedure(Connection: TsgcWSConnection; const Error: string) biçimindedir. OnException, procedure(Connection: TsgcWSConnection; E: Exception) biçimindedir. Bunları yazmak yerine IDE'nin oluşturmasına izin verin, çünkü fazla veya eksik bir parametre ilk projede en sık görülen derleme hatasıdır.
Evet. sgcWebSocket.pas, sgcWebSocket_Client.pas ve sgcWebSocket_Server.pas unit kapsamında bir platform koruması taşımaz ve her iki bileşen de ComponentPlatforms(0) ile kaydedilir, dolayısıyla IDE bunları bir hedefe kısıtlamaz. Demos\01.WebSocket_Quick_Start\07.Firemonkey_Server_and_Client altında bir FireMonkey istemci ve sunucu demosu bulunur. Kitaplıktaki platforma kısıtlı tek WebSocket bileşeni, Win32 ve Win64 için olan TsgcWebSocketClient_WinHTTP bileşenidir.
İstemcide TLS := True ayarlayın ve Port değerini TLS portuna yöneltin. Ardından TLSOptions.IOHandler ile bir TLS arka ucu seçin. OpenSSL her yerde çalışır ve Windows'ta çalıştırılabilir dosyanın yanında libcrypto-3.dll ile libssl-3.dll gerektirir. SChannel yalnızca Windows içindir ve ek bir şey getirmez. Yerel Apple ve Android işleyicileri Enterprise özellikleridir.
Evet, yukarıdaki üçüncü sekme tam olarak bunu yapar. Olay işleyicilerini Active := True ayarlamadan önce atayın; aksi hâlde ilk OnConnect, işleyiciniz bağlanmadan önce tetiklenebilir. Bir konsol uygulamasında istemcinin kendi iş parçacığında çalıştığını unutmayın, bu nedenle ana iş parçacığının canlı kalması gerekir; örneğin Readln ile bitmesinin nedeni budur.
Düşmüş bir istemciyi sizin seçtiğiniz bir aralıkla yeniden bağlar. Uzun süre çalışan her şey için açın, çünkü soketi kapatan bir ağ aksaklığı aksi hâlde uygulamanızı sessizce bağlantısız bırakır. WatchDog.Enabled := True ayarlayın ve varsayılan çok sık geliyorsa WatchDog.Interval ile WatchDog.Attempts değerlerini ayarlayın.
İndirmenizin içinde, Demos\ altında. Bu sayfada kullanılan çift 01.WebSocket_Quick_Start\01.Server_and_Client_Chat klasörüdür. Erkenden açmaya değer olanlar da şunlardır: kimlik bilgilerini denetleyen bir sunucu için 06.Authentication, çok platformlu bir istemci için 07.Firemonkey_Server_and_Client ve bağlantıların bir alt kümesine yayın yapmak için 12.Groups.
En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

Üzerine inşa etmeye hazır mısınız?

Kendi kodunuzdan tek satır yazmadan önce denemeyi indirin ve sohbet demosunu çalıştırın.