Soruya evrensel bir cevap vermek zordur, ancak en iyi yol muhtemelen "TCP ile UDP arasında" çizgide kalmak yerine yana doğru gitmektir :).
Biraz daha ayrıntılı açıklama:
Bir uygulamanın, ilettiği her veri parçası için bir onay yanıtı alması gerekiyorsa, TCP alabildiği kadar hızlıdır (özellikle mesajlarınız bağlantınız için en uygun MTU'dan çok daha küçükse) ve Gönderdiğiniz anda süresi dolarsa, ham UDP birçok nedenden ötürü en iyi seçimdir, ancak özellikle hız için değil.
Güvenilirlik daha karmaşık bir sorudur, her iki durumda da biraz görecelidir ve her zaman belirli bir uygulamaya bağlıdır. Basit bir örnek olarak, internet kablosunu yönlendiricinizden çıkarırsanız, TCP ile her şeyi güvenilir bir şekilde teslim etmede iyi şanslar. Daha da kötüsü, kodunuzda bununla ilgili bir şey yapmazsanız, işletim sisteminizin bir hata göstermeden önce büyük olasılıkla uygulamanızı birkaç dakikalığına bloke etmesi ve çoğu durumda bu gecikme kabul edilemez olmasıdır.
Dolayısıyla, geleneksel ağ protokolleriyle ilgili soru genellikle hız veya güvenilirlikle ilgili değil, daha çok rahatlıkla ilgilidir. Bu, TCP'nin bazı özelliklerini (otomatik tıkanıklık kontrolü, otomatik iletim birimi boyut ayarı, otomatik yeniden iletim, temel bağlantı yönetimi, ...) elde ederken, kaçırdığı önemli ve faydalı özelliklerden en azından bazılarını (mesaj sınırları - en çok önemli olan, bağlantı kalitesi izleme, bir bağlantı içinde çoklu akışlar, vb.) ve bunu kendiniz uygulamak zorunda kalmamak.
Benim bakış açıma göre SCTP artık en iyi evrensel seçim gibi görünüyor, ancak çok popüler değil ve onu bugünün İnternetinden güvenilir bir şekilde geçirmenin tek gerçekçi yolu hala onu UDP'nin içine almaktır (muhtemelen sctplib kullanarak ). Yine de nispeten basit ve kompakt bir çözümdür ve bazı uygulamalar için yine de kendi başına yeterli olmayabilir.
Daha gelişmiş seçeneklere gelince, bazı projelerde ZeroMQ kullandık ve gayet iyi çalıştı. Bu, sadece bir ağ protokolü değil, çok daha eksiksiz bir çözümdür (aslında mesajları iletmek için TCP, UDP, birkaç yüksek seviye protokolü ve bazı yerel IPC mekanizmalarını destekler). Birkaç sürümden beri, ilk geliştiricisi dikkatini yeni NanoMSG'sine ve şu anda en yeni NNG kitaplıklarına çevirdi . Kapsamlı bir şekilde geliştirilip test edilmedi ve çok popüler değil ama bir gün değişebilir. CPU ek yükünü ve ağ bant genişliği kaybını önemsemiyorsanız, bazı kitaplıklar sizin için çalışabilir. Diğer bazı ağ odaklı mesaj alışverişi kitaplıkları da mevcuttur.