2009-07-24 37 views

Trả lời

4

Sử dụng các trạng thái thường làm cho công việc của người lập trình trở nên dễ dàng hơn.

Tuy nhiên, các tiểu bang cũng giới thiệu tất cả các loại vấn đề tương tranh đơn giản không xuất hiện trong các tình huống không quốc tịch.

Đây thực chất là cuộc tranh luận giữa lập trình chức năng và bắt buộc.

+0

Tôi thực sự không hiểu "vấn đề đồng thời" bạn có thể có trong ứng dụng web ... –

+0

Giả sử bạn có hai người dùng trên trang web của mình cùng một lúc. Nếu cả hai đều gửi cùng một lúc, liệu có thể cả hai đều nhấn vào cơ sở dữ liệu của bạn hoặc một số dịch vụ khác và điều kiện chạy đua xảy ra sau đó? – samoz

+6

Nhưng đó là một vấn đề cơ sở dữ liệu mặc dù; không liên quan gì đến việc bạn đang lưu trữ trạng thái trong ứng dụng web của mình hay không. Các cơ sở dữ liệu tuân thủ ACID (tức là tất cả các cơ sở dữ liệu quan hệ) được viết để xử lý các loại vấn đề này. –

1

Những thứ như biểu mẫu dài (và thực sự có nhiều hơn một trang làm mới) dễ dàng hơn nhiều với trạng thái liên tục, vì bạn thực sự có thể theo dõi trang/giai đoạn mà người dùng đang sử dụng theo cách dễ dàng và thẳng thắn . Tuy nhiên, cá nhân tôi không nghĩ rằng một lợi thế nhỏ như vậy là đáng giá, nhưng nó phụ thuộc rất nhiều vào ứng dụng web được đề cập đến.

8

Dự án của chúng tôi sử dụng khung web Wicket, cho phép tương tác trạng thái hoặc trạng thái không quốc tịch. trang Stateful có một số ưu điểm:

  • Sử dụng một trang stateful của wicket làm cho nó dễ dàng hơn để thực hiện cập nhật trang một phần sử dụng khuôn khổ AJAX wicket của
  • Stateful là một mô hình lập trình "trực quan" hơn. Ví dụ, trong một lớp trang wicket, tôi có thể khai báo một trường thành viên riêng ở phía máy chủ, đặt nó khi trang được tải và truy cập lại mỗi khi yêu cầu AJAX truy cập trang để thực hiện một số cập nhật.
  • Wicket ngăn các sự cố đồng thời phổ biến nhất trong tầng web bằng cách đồng bộ hóa đối tượng phiên người dùng khi xử lý yêu cầu.
  • Trạng thái lưu trữ ở phía máy chủ có thể đôi khi cải thiện hiệu suất; ví dụ, một đối tượng tốn nhiều thời gian để xây dựng nhưng phải có sẵn cho trang có thể được tải chỉ một lần khi trang được khởi tạo lần đầu tiên.

Bất kỳ thứ gì có thể trong ứng dụng trạng thái cũng có thể được thực hiện là không quốc tịch - bạn chỉ cần lưu trữ trạng thái trên máy khách và gửi tất cả thông tin trạng thái có liên quan trên mọi yêu cầu.

Liên kết với wicket: http://wicket.apache.org/

1

Tôi đang ở statefull trại máy chủ client-stateless do scaleability nhưng khi phải đối mặt với các rào cản trong việc giải thích tại sao điều này và điều đó đã trở thành khó khăn hơn để thực hiện sử dụng một máy chủ không quốc tịch, bạn sẽ có được loại của từ chức trong thời gian dài, đây là nơi máy chủ stateful tỏa sáng :). Mặc dù tôi thích khách hàng statefull này không phải là dễ dàng để thực hiện hiệu quả bằng cách sử dụng asp.net viewstate và có lẽ đây là nơi mà trang web statefull được thực tế. Tôi nghĩ rằng máy khách statefull, máy chủ không quốc tịch làm cho bạn nhận thức rõ hơn về lượng dữ liệu được vận chuyển qua lại giữa các lốp. Điều đó đôi khi được ẩn cho đến khi xảy ra sự cố khi sử dụng mô hình lập trình máy chủ statefull. Ngoài ra, đi từ không quốc tịch để statefull là dễ dàng (chỉ cần bỏ qua thông tin nhà nước mà bạn đang cung cấp kể từ khi bạn đã biết nó ..). Đi ngược lại là gần như không thể/không có giá trị nó. Một điều khác bằng cách sử dụng một máy chủ statefull là thanh toán bù trừ trạng thái/bộ nhớ cache thường là một vấn đề khi bạn đang sử dụng cũng là một khách hàng statefull.Nó chỉ là không trực quan và khó hiểu, hoặc chỉ là tôi thôi :)

Dù sao GWT và nhiều bộ công cụ hiện đại khác (Silverlight nói chuyện với WCF) dường như thích máy khách trạng thái, máy chủ không trạng thái do vấn đề khả năng mở rộng. Có lẽ máy chủ stateful nên là ngoại lệ cho các quy tắc không quốc tịch ... người ta có thể chọn cho mỗi trang/cửa sổ.

nguồn: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/2871ef5076c1bdb6/43e7a5377047aa44?#43e7a5377047aa44

1

các ứng dụng web không quốc tịch là rất cần thiết khi bạn bắt đầu có giao thông cao hơn.

Có thể có nhiều dữ liệu người dùng mà bạn không muốn lưu trữ ở phía máy khách vì lý do bảo mật chẳng hạn. Trong trường hợp này, bạn cần lưu trữ phía máy chủ. Bạn có thể sử dụng phiên mặc định của ứng dụng web nhưng nếu bạn có nhiều cá thể của ứng dụng, bạn sẽ cần đảm bảo rằng mỗi người dùng luôn được chuyển hướng đến cùng một cá thể.

Cân bằng tải thường có khả năng có 'phiên cố định' trong đó trình cân bằng tải một số cách biết máy chủ nào gửi yêu cầu của người dùng đến. Đây không phải là lý tưởng mặc dù, ví dụ nó có nghĩa là mỗi khi bạn khởi động lại ứng dụng web của bạn, tất cả người dùng kết nối sẽ mất phiên của họ.

Một cách tiếp cận tốt hơn là lưu trữ phiên phía sau máy chủ web trong một số loại lưu trữ dữ liệu, những ngày này có rất nhiều sản phẩm tuyệt vời có sẵn (redis, mongo, elasticsearch, memcached). Bằng cách này, các máy chủ web là không trạng thái nhưng bạn vẫn có trạng thái máy chủ trạng thái và tính khả dụng của trạng thái này có thể được quản lý bằng cách chọn thiết lập kho dữ liệu phù hợp. Những kho dữ liệu này thường có dư thừa lớn nên hầu như luôn có thể thay đổi ứng dụng web của bạn và thậm chí lưu trữ dữ liệu mà không ảnh hưởng đến người dùng.

+0

Tôi đoán tôi đã không trả lời chính xác câu hỏi của OP, thực sự là ngược lại! Nhưng tôi cảm thấy câu trả lời của tôi phù hợp với cuộc thảo luận ... – shmish111

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