Kesinlikle ikili protokol ile TCP / IP vs REST üzerinden JSON kullanma hakkında artıları / eksileri vardır ve zaten ikili protokol daha hızlı olacağından şüpheleniyorum düşünüyorum. Size tam olarak ne kadar daha hızlı olduğunu söyleyemem (ve bu birçok faktöre bağlı olacaktır), ancak tahminim 1-2 büyüklük farkı olabilir.
İlk bakışta bir şey başka bir şeyden 10-100 kat daha yavaşsa, diz sarsıntılı bir reaksiyonunuz olabilir ve "hızlı şey" için gidebilirsiniz. Ancak, bu hız farkı sadece protokolün kendisindedir. Sunucu tarafında veritabanı / dosya erişimi varsa, aktarım katmanı seçiminizden etkilenmez. Bazı durumlarda, aktarım katmanı hızınızı çok daha az önemli hale getirebilir.
HTTP REST ve JSON birçok nedenden dolayı iyidir:
- hemen hemen herkes tarafından kolayca tüketilebilir. Web Uygulamanızı yazabilir, daha sonra dönüp dünyanın geri kalanı için API'nızı yayınlayabilirsiniz. Artık herkes aynı uç noktalara ulaşabilir ve hizmetlerinize ulaşabilir
- kolayca hata ayıklanabilir, bir paket dinleyicisi açabilir veya sadece metin dosyalarına gelen istekleri dökebilir ve neler olduğunu görebilirsiniz. Bunu ikili protokollerle yapamazsınız
- kolayca genişletilebilir. Daha sonra daha fazla özellik ve veri ekleyebilir ve eski istemcilerle uyumluluğu bozamazsınız.
- javascript istemcileri tarafından sarf edilebilir (henüz protobuf JS ayrıştırıcıya sahip olduklarından emin değil, bir tane olduğuna inanmıyorum)
TCP / IP üzerinden Protobuflar:
Benim seçimim olsaydı, eller aşağı HTTP REST ve JSON ile gitmek istiyorum. Diğer birçok şirketin ve web sitesinin bu rotaya gitmesinin bir nedeni var. Ayrıca gelecekte 2 uç noktayı her zaman destekleyebileceğinizi unutmayın. Tasarımınız doğruysa, son nokta seçiminizin sunucu tarafı iş mantığınızdan veya veritabanından tamamen ayrılması gerekir. Bu nedenle, daha sonra tüm / bazı istekler için daha fazla hıza ihtiyacınız olduğunu fark ederseniz, minimum yaygara ile protobuflar ekleyebilmeniz gerekir. Ancak hemen REST / JSON sizi daha hızlı yerden indirecek ve daha da ileriye götürecek.
Netty vs Spring'e kadar. Netty'yi doğrudan kullanmadım, ancak Spring'in sizin için bundan çok daha fazlasını sağlayan bir çerçeve olduğu hafif bir web sunucusu olduğuna inanıyorum. Veri erişim katmanları, arka plan iş planlaması ve (bence) bir MVC modeli var, bu yüzden çok daha ağır. Hangisini seçmeli? HTTP yoluna gitmeye karar verdiyseniz, sonraki soru muhtemelen uygulamanızın ne kadar standart olduğudur? Standart kalıba uymayan çılgın bir özel mantık yazmak üzereyseniz ve ihtiyacınız olan tek şey sadece bir HTTP sunucusu katmanı ise, Netty ile gidin.
Ancak, uygulamanın o kadar da özel olmadığını ve muhtemelen Spring'in sunduğu birçok şeyden faydalanabileceğinden şüpheleniyorum. Ancak bu, uygulamanızı Spring'in çerçevesi etrafında yapılandırmanız ve sizden beklediğiniz şekilde yapmanız gerektiği anlamına gelir; bu, ürününüze dalmadan önce Spring hakkında daha fazla bilgi edinmek anlamına gelir. Çerçeveler genel olarak harika çünkü tekrar sizi yerden daha hızlı çıkarıyorlar, ancak dezavantajı kendi tasarımınızı yapmak yerine kalıplarına uymanız ve çerçevenin sadece çalışmasını beklemeniz.
(*) - geçmişte yayınlarımın tüm dünyanın görüşlerini yansıtmadığı belirtildi, bu yüzden kayıtlara gideceğim ve sadece Netty ile sınırlı deneyime sahip olduğumu ekledim (daha önce Play framework'ü kullandım) Netty'ye dayanan) veya Spring (sadece okudum) Öyleyse söylediğimi bir tuz tanesi ile al.