Chắc chắn có những ưu / nhược điểm về việc sử dụng JSON so với REST so với TCP / IP ngay lập tức với giao thức nhị phân và tôi nghĩ rằng bạn đã nghi ngờ rằng giao thức nhị phân sẽ nhanh hơn. Tôi không thể cho bạn biết chính xác tốc độ của nó nhanh hơn bao nhiêu (và điều này phụ thuộc vào rất nhiều yếu tố), nhưng tôi đoán có thể là 1-2 đơn hàng chênh lệch cường độ.
Thoạt nhìn nếu một thứ gì đó chậm hơn 10 - 100 lần so với thứ khác, bạn có thể có phản ứng giật đầu gối và đi tìm "điều nhanh". Tuy nhiên, sự khác biệt tốc độ này chỉ có trong chính giao thức. Nếu có quyền truy cập cơ sở dữ liệu / tệp ở phía máy chủ, điều đó sẽ không bị ảnh hưởng bởi sự lựa chọn của bạn về lớp chuyển. Trong một số trường hợp, nó có thể làm cho tốc độ lớp chuyển của bạn giảm đi đáng kể.
HTTP REST và JSON tốt cho một số lý do:
- chúng dễ dàng được tiêu thụ bởi bất cứ ai. Bạn có thể viết Ứng dụng web của mình, sau đó quay lại và xuất bản API của mình cho phần còn lại của thế giới sử dụng. Bây giờ bất cứ ai cũng có thể đạt được điểm cuối tương tự và nhận được dịch vụ của bạn
- chúng có thể dễ dàng gỡ lỗi, bạn có thể mở gói sniffer hoặc đơn giản là đổ các yêu cầu đến vào tệp văn bản và xem điều gì đang xảy ra. Bạn không thể làm điều đó với các giao thức nhị phân
- chúng có thể dễ dàng mở rộng. Bạn có thể thêm nhiều thuộc tính và dữ liệu sau đó và không phá vỡ tính tương thích với các máy khách cũ.
- có thể sử dụng bởi các ứng dụng khách javascript (chưa chắc họ đã có trình phân tích cú pháp JS protobuf chưa, không tin là có)
Protobufs qua TCP / IP:
Nếu đó là lựa chọn của tôi, tôi sẽ thực hiện với HTTP REST và JSON. Có một lý do mà rất nhiều công ty và trang web khác đã đi theo con đường đó. Ngoài ra, hãy nhớ rằng trong tương lai bạn luôn có thể hỗ trợ 2 điểm cuối. Nếu thiết kế của bạn là chính xác, lựa chọn điểm cuối của bạn sẽ được tách rời hoàn toàn khỏi logic nghiệp vụ phía máy chủ hoặc cơ sở dữ liệu. Vì vậy, nếu sau này bạn nhận ra rằng bạn cần nhiều tốc độ hơn cho tất cả / một số yêu cầu, bạn sẽ có thể thêm protobuf với sự phiền phức tối thiểu. Tuy nhiên, ngay lập tức, REST / JSON sẽ đưa bạn lên mặt đất nhanh hơn và đưa bạn đi xa hơn.
Theo như Netty vs Spring đi. Tôi đã không sử dụng Netty trực tiếp, nhưng tôi tin rằng đây chỉ là một máy chủ web nhẹ trong khi Spring là một khung cung cấp nhiều thứ cho bạn hơn thế. Nó có các lớp truy cập dữ liệu, lập lịch công việc nền và (tôi nghĩ) một mô hình MVC, vì vậy nó nặng hơn nhiều. Chọn cái nào? Nếu bạn quyết định đi theo con đường HTTP, thì câu hỏi tiếp theo có lẽ là ứng dụng của bạn chuẩn như thế nào? Nếu bạn chuẩn bị viết một số logic tùy chỉnh điên rồ không phù hợp với khuôn chuẩn và tất cả những gì bạn cần chỉ là một lớp máy chủ HTTP, hãy đi với Netty.
Tuy nhiên, tôi nghi ngờ ứng dụng của bạn không có gì đặc biệt và nó có thể có lợi từ rất nhiều thứ mà Spring phải cung cấp. Nhưng điều đó có nghĩa là bạn nên cấu trúc ứng dụng của mình xung quanh khuôn khổ của Spring và làm mọi thứ theo cách họ mong đợi bạn làm, điều đó có nghĩa là tìm hiểu thêm về Spring trước khi đi sâu vào sản phẩm của bạn. Các khung nói chung là tuyệt vời vì một lần nữa chúng đưa bạn lên mặt đất nhanh hơn, nhưng nhược điểm là bạn phải phù hợp với khuôn của chúng thay vì thiết kế của riêng bạn và sau đó mong đợi khung chỉ hoạt động.
(*) - trước đây người ta chỉ ra rằng các bài đăng của tôi không phản ánh ý kiến của toàn thế giới, vì vậy tôi sẽ ghi lại và chỉ nói thêm rằng tôi có kinh nghiệm hạn chế với Netty (Tôi đã sử dụng Play framework trước đây dựa trên Netty) hoặc Spring (Tôi chỉ đọc về nó). Vì vậy, lấy những gì tôi nói với một hạt muối.