มีข้อดี / ข้อเสียอย่างแน่นอนเกี่ยวกับการใช้ JSON ผ่าน REST เทียบกับ TCP / IP ที่ตรงกับโปรโตคอลโปรโตคอลและฉันคิดว่าคุณกำลังสงสัยว่าไบนารีโปรโตคอลจะเร็วขึ้น ฉันไม่สามารถบอกคุณได้อย่างรวดเร็วว่า (ขึ้นอยู่กับปัจจัยหลายอย่าง) แต่ฉันเดาว่าอาจจะมีความแตกต่างของขนาด 1-2 คำสั่ง
จากภาพรวมในครั้งแรกหากสิ่งที่ช้ากว่าสิ่งอื่น 10-100 เท่าคุณอาจมีปฏิกิริยากระตุกเข่าและไปที่ "สิ่งที่เร็ว" อย่างไรก็ตามความแตกต่างความเร็วนี้มีเฉพาะในโปรโตคอลเท่านั้น หากมีการเข้าถึงฐานข้อมูล / ไฟล์ทางฝั่งเซิร์ฟเวอร์นั่นจะไม่ได้รับผลกระทบจากการเลือกเลเยอร์การถ่ายโอน ในบางกรณีอาจทำให้ความเร็วเลเยอร์การถ่ายโอนของคุณมีนัยสำคัญน้อยลง
HTTP REST และ JSON นั้นดีด้วยเหตุผลหลายประการ:
- พวกมันบริโภคได้ง่ายโดยใคร ๆ คุณสามารถเขียน Web App ของคุณจากนั้นหมุนและเผยแพร่ API ของคุณเพื่อให้คนทั่วโลกใช้ ตอนนี้ทุกคนสามารถเข้าถึงจุดสิ้นสุดเดียวกันและเข้าถึงบริการของคุณได้
- พวกเขาสามารถ debuggable ได้ง่ายคุณสามารถเปิดแพ็คเก็ตดมกลิ่นหรือเพียงแค่ถ่ายโอนการร้องขอขาเข้าไปยังไฟล์ข้อความและดูว่าเกิดอะไรขึ้น คุณไม่สามารถทำได้ด้วยโปรโตคอลไบนารี
- สามารถยืดได้ง่าย คุณสามารถเพิ่มคุณสมบัติและข้อมูลเพิ่มเติมในภายหลังและไม่ทำลายความเข้ากันได้กับไคลเอนต์เก่า
- บริโภคได้โดยไคลเอนต์ javascript (ไม่แน่ใจว่าพวกเขามีตัวแยกวิเคราะห์ JS protobuf ยังไม่เชื่อว่ามีหนึ่ง)
Protobufs ผ่าน TCP / IP:
ถ้ามันเป็นทางเลือกของฉันฉันจะลงมือกับ HTTP REST และ JSON มีเหตุผลที่ บริษัท และเว็บไซต์อื่น ๆ มากมายเดินทางไปในเส้นทางนั้น โปรดทราบว่าในอนาคตคุณสามารถรองรับ 2 จุดสิ้นสุดได้เสมอ หากการออกแบบของคุณถูกต้องตัวเลือกปลายทางของคุณควรแยกออกจากตรรกะทางธุรกิจหรือฐานข้อมูลของคุณ ดังนั้นหากคุณทราบในภายหลังว่าคุณต้องการความเร็วเพิ่มขึ้นสำหรับคำขอทั้งหมด / บางส่วนคุณควรจะเพิ่มโพรโทบูฟด้วยความยุ่งยากน้อยที่สุด ทันทีจากค้างคาว REST / JSON จะพาคุณออกจากพื้นเร็วกว่าและพาคุณไปต่อ
เท่าที่ Netty vs Spring ดำเนินไป ฉันไม่ได้ใช้ Netty โดยตรง แต่ฉันเชื่อว่ามันเป็นเพียงเว็บเซิร์ฟเวอร์ที่มีน้ำหนักเบาเพราะสปริงเป็นกรอบที่ให้คุณมากกว่านั้น มีเลเยอร์การเข้าถึงข้อมูลการจัดตารางงานเบื้องหลังและ (ฉันคิดว่า) โมเดล MVC ดังนั้นจึงมีน้ำหนักมากขึ้น เลือกแบบไหน หากคุณตัดสินใจที่จะใช้วิธี HTTP คำถามต่อไปน่าจะเป็นแอพมาตรฐานของคุณหรือไม่ หากคุณกำลังจะเขียนตรรกะที่กำหนดเองบางอย่างที่ไม่เหมาะกับรามาตรฐานและสิ่งที่คุณต้องการเพียงแค่เลเยอร์เซิร์ฟเวอร์ HTTP ไปกับ Netty
อย่างไรก็ตามฉันสงสัยว่าแอพของคุณนั้นไม่พิเศษและอาจเป็นประโยชน์จากหลาย ๆ สิ่งที่สปริงเสนอให้ แต่นั่นหมายความว่าคุณควรจัดโครงสร้างแอปของคุณให้อยู่ในกรอบของ Spring และทำสิ่งต่างๆตามที่พวกเขาคาดหวังให้คุณทำซึ่งจะหมายถึงการเรียนรู้เพิ่มเติมเกี่ยวกับ Spring ก่อนที่จะดำดิ่งลงสู่ผลิตภัณฑ์ของคุณ กรอบงานทั่วไปนั้นยอดเยี่ยมเพราะพวกเขาช่วยให้คุณออกจากพื้นได้เร็วขึ้น แต่ข้อเสียคือคุณต้องปรับให้เข้ากับรูปแบบของตัวเองแทนที่จะทำการออกแบบของคุณเองและคาดว่ากรอบงานนั้นจะทำงาน
(*) - ในอดีตมันชี้ให้เห็นว่าโพสต์ของฉันไม่ได้สะท้อนความคิดเห็นของคนทั้งโลกดังนั้นฉันจะไปบันทึกและเพียงแค่เพิ่มว่าฉันมีประสบการณ์ จำกัด กับ Netty ทั้งสอง (ฉันเคยใช้กรอบ Play ซึ่งขึ้นอยู่กับ Netty) หรือ Spring (ฉันอ่านแล้วเท่านั้น) ดังนั้นเอาสิ่งที่ฉันพูดด้วยเม็ดเกลือ