2012-07-03 41 views
7

Tôi có một ứng dụng mà người dùng có thể thay đổi giá trị chuyển đổi giữa truefalse bằng nút chuyển đổi/nút nhỏ và thay đổi được tự động gửi tới máy chủ mà không yêu cầu người dùng bấm một cách rõ ràng như "lưu".Các yêu cầu AJAX tiếp theo có được đảm bảo để nhận được theo thứ tự không?

Bây giờ nếu người dùng nhấn nút chuyển đổi hai lần liên tiếp nhanh chóng, có thể máy chủ sẽ nhận các gói dữ liệu không đúng thứ tự và do đó sẽ lưu trữ giá trị sai? Và bởi máy chủ tôi có nghĩa là logic ứng dụng đang chạy trên máy chủ, không phải là ngăn xếp mạng của hệ điều hành.

Tôi biết các gói TCP được đánh số để hệ điều hành nhận được sắp xếp chúng trước khi chuyển chúng đến ứng dụng và HTTP chạy trên đầu trang của TCP. Tuy nhiên, phần tôi tò mò là trong trường hợp HTTP tạo ra/không tạo ra một kết nối TCP mới.

N.B. Tôi đang sử dụng jQuery để gửi các yêu cầu AJAX và tôi giả định rằng họ được đảm bảo để được gửi theo thứ tự giống như các cuộc gọi đến thư viện jQuery. Giả định này có hợp lệ không?

Trả lời

5

Không có bảo đảm như vậy trong giao thức http. Ngay cả khi một số triển khai thực sự có thể đảm bảo nó, bạn không nên dựa vào nó.

Bạn có thể thực hiện việc này: duy trì số lần nhấp (hoặc gọi số phiên bản nếu bạn thích) và gửi số đó đến máy chủ. Trên máy chủ, lưu trữ số phiên bản cuối cùng khi bạn thay đổi trạng thái và sử dụng số này để kiểm tra xem bạn có bao giờ ghi đè lên giá trị gần đây hơn không.

+0

+1; logic đơn giản nhất cho phiên bản như vậy có thể là '(new Date) .getTime()' –

+3

JavaScript +1 là một chuỗi duy nhất do đó jQuery sẽ gửi các yêu cầu theo thứ tự, nhưng không có sự bảo đảm như vậy khi các yêu cầu đến máy chủ. Trong thực tế họ hầu như luôn luôn sẽ nhưng không viết bất kỳ logic để phụ thuộc vào nó. –

+0

@DavidHedlund Watchout: Điều này có thể không thành công khi thời gian thay đổi (thay đổi thời gian rõ ràng của người dùng, đồng bộ hóa máy chủ thời gian). –

Các vấn đề liên quan