Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Hızlı çalışan server Firebase, Udp, Tcp, MQTT
#1
Merhaba

10-15 adet IoT cihazından gelen verileri 3-4 windows yada Android kullanıcısına anlık olarak iletmek istiyorum.
IoT cihazlarından veriler 2G yada 3G ile alınacak bu verileri hangi yolu izlersem en hızlı  gönderebilir ve işleyebilirim(veritabanı kayıt ve anlık iletme)?

Kiralık bir vds de UDP ,TCP sunucu kurmak, MQTT, delphi web server yada firebase için çözüm bulmak, hangisi daha hızlı veri iletimi sağlar?
Sürekli olarak veri alma işleme yapılmayacak haftada bir yada gerektiğinde çalışacak bir sistem.

 Konu hakkında tecrübenizi öğrenebilir miyim ?
Cevapla
#2
Merhaba,
Firebase kullanmayın. (Özel verileriniz 3. şahıslarında barınmış olur)
UDP kullanmayın. Veri kaybına tahammülünüz olmadığını düşünerek yazdım.
TCP (Client-Server mimarisine ihtiyacınız olacaktır) kullanabilirsiniz.
MQTT kullanabilirsiniz.
TCP ve MQTT protokollerinde gözle görülür bir hız farkı olmayacaktır.
Belirtmediğiniz bir yöntemden de bahsedeyim. 
Terminal cihazınız (IoT cihazı) verileri doğrudan db ye Post ederse süper hızlı bir mimari olacaktır.
Begin : = end / 2;
Cevapla
#3
(17-06-2022, Saat: 13:02)RAD Coder Adlı Kullanıcıdan Alıntı: Merhaba,
Firebase kullanmayın. (Özel verileriniz 3. şahıslarında barınmış olur)
UDP kullanmayın. Veri kaybına tahammülünüz olmadığını düşünerek yazdım.
TCP (Client-Server mimarisine ihtiyacınız olacaktır) kullanabilirsiniz.
MQTT kullanabilirsiniz.
TCP ve MQTT protokollerinde gözle görülür bir hız farkı olmayacaktır.
Belirtmediğiniz bir yöntemden de bahsedeyim. 
Terminal cihazınız (IoT cihazı) verileri doğrudan db ye Post ederse süper hızlı bir mimari olacaktır.

Cevabınız için teşekkür ederim.

Firebase https istiyor IoT için bir çözüm bulamamıştım. 
MQTT için FMX tarafında bir çözüm yok diye biliyorum TMS hariç.
TCP kullanmak daha uygun gibi.

Doğrudan db post için cihazda hhtp get ile bi php sunucusuna atabilirim.
 2g için http get denemiştim çok hızlı çalışmadığını gördüm karşı tarafta php servis vardı.3G deneme imkanı olmadı.


MQTT de TCP ile çalıştığı için hız farkı olmadığını düşünüyorsunuz değil mi?
Cevapla
#4
Mobil cihazda MQTT bileşeni kullanmanıza gerek yok.
Kullanacağınız mimaride MQTT, M2M çalışacak ise bu tip bileşenler kullanırsınız. 
IoT cihaz, bir REST API üzerinden DB'ye yazar. 
Mobil uygulama yine REST API yardımı ile DB den verileri okur. 
REST API için PHP yerine yine Delphi tarafından yüksek desteğe sahip Web Server mimarilerinden (DataSnap, Web Broker, RADServer vb) birini kullanabilirsiniz.
M2M, yani IoT den mobile veya uygulamalar arasında tek veya çift taraflı doğrudan veri akışı olacaksa MQTT kullanın, yoksa doğrudan http ile iş yapmanız daha doğru bir yaklaşım olacaktır. 
Mimari aşağıdaki gibi olabilir. 

   
Begin : = end / 2;
Cevapla
#5
Çift taraflı canlı olarak haberleşme için TCP mqtt udp gibi soket uygulaması kullanın. Fakat istek cevap ve sürekli olmayacaksa rest iyidir ve güncel çözümdür.

Cihaz sayın çok az. En güncel en rahat ve en kolay kullanım Restfull api server ile çalışmak. Delphi ve bir sürü dil ile bunu rahatlıkla kullanabilirsiniz. Delphi, nodejs, Java, PHP, .net core, golang

Delphi iyidir derseniz. Bununla ilgili mantığını anlatacak giriş seviye bir örnek verebilirim. Diğer diller için internette bir sürü örnek mevcut
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#6
(18-06-2022, Saat: 07:43)3ddark Adlı Kullanıcıdan Alıntı: Çift taraflı canlı olarak haberleşme için TCP mqtt udp gibi soket uygulaması kullanın. Fakat istek cevap ve sürekli olmayacaksa rest iyidir ve güncel çözümdür.

Cihaz sayın çok az. En güncel en rahat ve en kolay kullanım Restfull api server ile çalışmak. Delphi ve bir sürü dil ile bunu rahatlıkla kullanabilirsiniz. Delphi, nodejs, Java, PHP, .net core, golang

Delphi iyidir derseniz. Bununla ilgili mantığını anlatacak giriş seviye bir örnek verebilirim. Diğer diller için internette bir sürü örnek mevcut

Web tarafında bilgim ve tecrübem az.  Örnekbir rest servis ile 2g üzerinden http get verisini alıp mysqle yazmıştım. Kullandığım Arduino kütüphanesinden mi yoksa 2G sebebiyle mi bilmiyorum ama veri gelme ve yazma zamanı çok uzun göründü gözüme. Yaptığım her işlemi de seri monitörden takip ettiğim için de işlemin yavaş olmasına sebep olmuş olabilir.

Öncelik anlık veriyi dinleme yapan 3-5 kullanıcıya bildirmek.Veriyi get ile alıp yazıp daha sonra talep eden kullanıcıya tekrar get ile json olarak vermek iletişim süresini uzatmaz mı?
PHP bilgim çok sınırlı gelen son datayı db e yazmadan önce değişken içinde tutup istek yapan client a vermek mümkün mü?
Basit bir delphi server denedim json olarak gelen get verisini alamadım ve cevap geriye json olarak da dönüş yapamadım.

   
procedure TfrmAna.IdHTTPServer1CommandGet(AContext: TIdContext;
 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
 var
 HtmlResult: String;
   wrtJSON: TJsonObjectWriter;
   giden:String;
   Jvalue: TJSONValue;
   islem:integer;
begin
Listbox1.Items.Add (ARequestInfo.Document);
Listbox1.Items.Add (ARequestInfo.Command);
memo1.Lines.Add('calisti');
try
   Jvalue := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(ARequestInfo.Document), 0)
     as TJSONObject;
   islem := Jvalue.GetValue<integer>('islem');
   case islem of

     0:begin
      var seri :=  Jvalue.GetValue<String>('seri');
      var data1 :=  Jvalue.GetValue<String>('data1');
      var data2 :=   Jvalue.GetValue<String>('data2');
      memo1.lines.Add(seri +' '+ data1+' '+ data2);

     end;
      1:begin //android telefondan
        wrtJSON := TJsonObjectWriter.Create();
       try
         wrtJSON.WriteStartObject;
         wrtJSON.WritePropertyName('islem');
         wrtJSON.WriteValue('bilgi');
         wrtJSON.WriteEndObject;
         Memo1.Text := wrtJSON.JSON.Format;
         HtmlResult := wrtJSON.JSON.Format;
       finally
         wrtJSON.DisposeOf;
       end;
      AResponseInfo.ContentText := HtmlResult ;
            end;
         end;

  // Memo1.lines.Add(islem);

 finally
   Jvalue.DisposeOf;
 end;

wrtJSON := TJsonObjectWriter.Create();
 try
   wrtJSON.WriteStartObject;
   wrtJSON.WritePropertyName('islem');
   wrtJSON.WriteValue('ilk_veri');
   wrtJSON.WriteEndObject;
   Memo1.Text := wrtJSON.JSON.Format;
   HtmlResult := wrtJSON.JSON.Format;
 finally
   wrtJSON.DisposeOf;
 end;
AResponseInfo.ResponseNo := 200 ;
AResponseInfo.ResponseText:=htmlresult;
AResponseInfo.ContentText:=htmlresult;
end;

Delphi Indy ile web server i çözemedim. GET komutu çalışıyor ama veriyi alamaıyorum.

   
   
   

Dün gece MQTT ile bir örnek hazırladım 500ms lik bir bekleme ile çalışıyor.

   

Delphi Indy ile basit bir web server hazırlayabilsem MQTT den daha verimli mi olur denemek istiyorum.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Çalışan Exe Formuna Müdahale Etmek SercanTEK 4 445 01-03-2024, Saat: 22:51
Son Yorum: SercanTEK
  server programinda hani veritabani dogru olur. sadikacar60 4 426 30-01-2024, Saat: 21:06
Son Yorum: sadikacar60
  [ÇÖZÜLDÜ]Firebase Bearer Token Alma shooterman 8 722 05-12-2023, Saat: 12:17
Son Yorum: shooterman
  OPC Server veri okuma enigma 1 395 13-09-2023, Saat: 11:50
Son Yorum: shooterman
  EnumWindows apisi sadece çalışan uygulamalar kofmaster 1 1.702 26-08-2023, Saat: 10:40
Son Yorum: veteran



Konuyu Okuyanlar: 1 Ziyaretçi