sgcWebSockets çok çeşitli protokolleri destekler; HTTP/2 şu anda geliştirilmekte olan protokoldür.
HTTP 1.1, son 15 yılda en çok kullanılan HTTP Protokolü olmuştur ve sunucu ile istemcilerde yaygın olarak uygulanmıştır. Ancak internet büyüdükçe, uygulamalar ve web siteleri büyüdü ve yüklenen veri miktarı arttıkça, HTTP 1.1'in eksiklikleri daha belirgin hale geldi. Temel olarak bağlantı başına bir istek ve isteklerin tekrarlanması.
HTTP 2 şu gibi bazı avantajlara sahiptir:
- Çoğullamalı (Multiplexed): birden fazla istek için tek bir bağlantının paylaşılmasına olanak tanır
- Başlık sıkıştırma: gönderilecek daha az veri.
- Sunucu gönderimi (Server push): sunucu, istemciye ihtiyaç duyacağını düşündüğü bazı kaynakları gönderebilir.
HTTP 1.1 Testi
Test çok basittir; yalnızca bir görüntü almak için sunucuyu 100 kez, birer birer çağırın; böylece ilki bittiğinde ikinci istek gönderilir ve böyle devam eder
procedure TestHTTP1;
begin
oHTTP := TIdHTTP.Create(nil);
Try
for i := 1 to 100 do
begin
oStream := TMemoryStream.Create;
Try
oHTTP.Get('https://ik.imagekit.io/demo/img/http_test/h_' + Format('%.2d', [i]) + '.jpg', oStream);
oJPEG := TJPEGImage.Create;
oJPEG.Scale := jsHalf;
oStream.Position := 0;
oJPEG.LoadFromStream(oStream);
...
TThread.Queue(nil,
procedure
begin
FRMHTTP2_Client.imgHTTP.Canvas.Draw(vCol * 50, vRow * 50, oJPEG);
end);
Finally
oStream.Free;
End;
end;
Finally
oHTTP.Free;
Terminate;
end;
end;
HTTP 2.0 Testi
Test, HTTP 1.1'e göre daha da basittir; yalnızca http2 bileşenini oluşturun ve istek almak için 100 kez çağırın; yanıt almak için beklemeye gerek yoktur çünkü yanıtlar istemci tarafından alındığında asenkron olarak gönderilir.
procedure TestHTTP2;
var
oHTTP2: TsgcHTTP2Client;
begin
oHTTP2 := TsgcHTTP2Client.Create;
oHTTP2.OnHTTP2Response := OnHTTP2ResponseEvent;
oHTTP2.Request.Accept := 'image/*,*/*;q=0.8';
for i := 1 to 100 do
oHTTP2.Get('https://ik.imagekit.io/demo/img/http_test/h_' + Format('%.2d', [i]) + '.jpg');
end;
procedure OnHTTP2ResponseEvent(const Connection: TsgcHTTP2ConnectionClient; const Request: TsgcHTTP2RequestProperty; const Response: TsgcHTTP2ResponseProperty);
var
oJPEG: TJPEGImage;
vCol, vRow: Integer;
begin
oJPEG := TJPEGImage.Create;
oJPEG.LoadFromStream(Response.Data);
oJPEG.Scale := jsHalf;
...
TThread.Queue(nil,
procedure
begin
if Assigned(imgHTTP2) then
begin
imgHTTP2.Canvas.Draw(vCol * 50, vRow * 50, oJPEG);
end;
end);
end;
Ve kazanan...
Büyük olasılıkla hangi protokolün daha hızlı olduğunu zaten biliyorsunuz; windows için aşağıdaki derlenmiş demoyu kullanarak kendiniz test edebilirsiniz.
NOT: demoda, HTTP1.1 testi ikincil bir iş parçacığında çalışır ve HTTP2.0 asenkron olduğundan ikincil bir iş parçacığında çalışmasına gerek yoktur.
