RESTful HTTP và websocket trong cùng một ứng dụng?


17

Nếu một ứng dụng đã được mở WebSocketcho nguồn cấp dữ liệu trực tiếp, tôi có nên sử dụng nó AJAXcho các giao tiếp khác với máy chủ không?

Vì kết nối đã được mở, chúng ta có nên sử dụng nó cho các yêu cầu Request/Responsevà không phải là thời gian thực không?

Tôi thích RESTful HTTPcác yêu cầu vì tôi thấy chúng dễ gỡ lỗi hơn. Bạn có thể sử dụng trình duyệt với các url hoặc lọn tóc để kiểm tra những gì API trả về. Bạn không phải viết mã để mở a WebSocket.

Nó sẽ là lạ khi có RESTful HTTP APIWebSockettrong cùng một ứng dụng?


1
"Bạn không phải viết bất kỳ mã nào để kiểm tra API" Bạn có thể giải thích điều này thêm một chút không? Điều gì khiến bạn nghĩ rằng bạn không phải kiểm tra API?
Elias Van Ootegem

Công cụ dành cho nhà phát triển Chrome nếu tôi không nhầm, cho phép bạn mở websocket và gửi tin nhắn theo thời gian thực
maple_shaft

@EliasVanOotegem Điểm tốt. Xin lỗi điều đó không rõ ràng. Bạn vẫn phải kiểm tra API với một dự án đơn vị ở phía máy chủ. Ý tôi là, nếu bạn muốn xem nhanh API sẽ trả về cái gì, bạn có thể sử dụng một broswer với url. Bạn không cần phải viết mã để mở websocket. Tôi cập nhật câu hỏi của tôi.
Marc

@maple_shaft Điều đó tốt nhưng bạn cần phải ở trên một trang có WebSocket được mở cho máy chủ.
Marc

Câu trả lời:


14

Một trong những mục tiêu thiết kế cốt lõi của Websockets là nó cho phép cả giao thức HTTP và Websocket được truyền thông qua cùng một cổng. Nó đạt được điều này bằng cách yêu cầu rõ ràng khách hàng thực hiện bắt tay Websocket với yêu cầu Nâng cấp HTTP. Theo cách này, máy chủ có thể xử lý kết nối yêu cầu HTTP tiêu chuẩn cũng như yêu cầu Nâng cấp HTTP hiện được nâng cấp thành kết nối song công hai chiều liên tục.

Vì vậy, có, đây chắc chắn là một trường hợp sử dụng hợp lệ, tuy nhiên việc bạn NÊN làm điều này cho ứng dụng cụ thể của bạn là một vấn đề hoàn toàn khác. Websockets rất hữu ích và có ý nghĩa khi bạn có các tình huống mà máy chủ phải có khả năng gửi dữ liệu không mong muốn tới máy khách (nguồn cấp dữ liệu trực tiếp). Giao thức HTTP và các dịch vụ REST rất hữu ích khi bạn muốn chặn dữ liệu khách hàng đồng bộ.

Nếu các yêu cầu của bạn là như vậy cả hai đều có ý nghĩa cho ứng dụng của bạn thì bằng mọi cách bạn nên sử dụng cả hai. Tuy nhiên, nếu tương tác duy nhất của bạn với máy chủ là nguồn cấp dữ liệu trực tiếp thì các dịch vụ REST không phù hợp. Tôi nghĩ rằng dễ gỡ lỗi nên xếp hạng khá thấp về tầm quan trọng về các thuộc tính chất lượng hệ thống mà bạn nên thiết kế kiến ​​trúc của mình.


1
Đó là những gì tôi đã tự hỏi. Thật hợp lý khi sử dụng websockets cho nguồn cấp dữ liệu trực tiếp theo thời gian thực nhưng còn hoạt động CRUD thì sao? Tôi có ý nghĩa hơn trong việc sử dụng một yêu cầu HTTP tiêu chuẩn cho những yêu cầu đó.
Marc

2
@Marc, tôi sẽ không thấy lạ khi tách các hoạt động CRUD và các mối quan tâm trong thời gian thực (một sử dụng HTTP các Websockets khác) ... nhưng ... tôi tin rằng bạn sẽ nhận được phản hồi tốt hơn từ máy chủ, cũng như hiệu suất tốt hơn, nếu bạn sử dụng kết nối liên tục (Websocket) cho tất cả các hoạt động của bạn. Điều này thực sự phụ thuộc vào nhu cầu CRUD của bạn là gì, nhưng tôi sẽ không né tránh giao diện CRUD Websocket.
Bí ẩn

nâng cao tinh thần! newbie ở đây, vì bạn đã đề cập cả hai sẽ được liên lạc qua cùng một cổng, nếu bạn đang tìm hiểu giá cổ phiếu từ một luồng trực tiếp và do lưu lượng truy cập lớn, luồng sẽ ngắt kết nối trong vài phút, làm thế nào bạn có được dữ liệu ở giữa hoặc cái gì các chiến lược tồn tại để giải quyết trường hợp đó
PirateApp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.