2013-04-26 16 views
8

Bạn muốn biết cách một yêu cầu được xử lý bởi nhiều máy chủ duy trì cùng một phiên người dùng.Cách yêu cầu ứng dụng web được xử lý bởi nhiều máy chủ bằng cách duy trì cùng một phiên người dùng.

Ví dụ: Chúng tôi đăng nhập vào IRCTC và cố gắng đặt vé. Trong quá trình thanh toán IRCTC liệt kê ra nhiều tùy chọn ngân hàng có nút radio cho giao dịch trực tuyến. Giả sử tôi quyết định thực hiện giao dịch bằng ngân hàng CITI, khi tôi nhấp vào nút radio của CITI Bank, tôi được chuyển đến trang giao dịch trang web của Ngân hàng CITI, tức là bạn sẽ thấy URL được chuyển từ Trang web IRCTC sang URL của CITI Bank. Điều đó có nghĩa là tôi hoàn toàn không tham gia IRCTC và chuyển sang trang web của ngân hàng CITI. Bây giờ khi giao dịch thanh toán của tôi được hoàn thành, tôi đã chuyển trở lại trang web IRCTC từ trang web của Ngân hàng CITI KHÔNG CÓ KẾT THÚC NGƯỜI DÙNG tức là khi tôi chuyển từ URL ngân hàng CITI sang IRCTC sau khi hoàn tất giao dịch, phiên người dùng được duy trì khi đăng nhập tiểu bang.

Tôi muốn biết cách hoạt động của tính năng này.

  1. Làm thế nào một yêu cầu được gửi từ IRCTC đến trang web của Ngân hàng Citi
  2. Làm thế nào máy chủ CITI Ngân hàng nhận được thông tin chi tiết từ IRCTC
  3. Làm thế nào cùng một yêu cầu trở lại từ CITI Ngân hàng để IRCTC tức là cách các máy chủ được bật (từ Ngân hàng CITI cho IRCTC)
  4. Cách duy trì cùng một phiên người dùng giữa hai máy chủ khác nhau trong khi liên lạc tức là IRCTC sẽ hiển thị cho người dùng là người dùng đã đăng nhập khi yêu cầu quay trở lại từ ngân hàng CITI đến IRCTC sau khi giao dịch thanh toán hoàn tất. Làm cách nào để duy trì cùng một phiên người dùng trong khi chuyển đổi giữa hai máy chủ?

Tôi đang sử dụng công việc khung Struts. Vui lòng giúp tôi về vấn đề này và thực hiện tương tự với một số ví dụ.

Giả sử IRCTC sử dụng thanh chống (Jsp/Servlets), thành phần chống mất tính linh hoạt để gửi chi tiết IRCTC tới ngân hàng Citi và nhận lại các khoản tiền gửi ngân hàng CITI cho IRCTC. Có thể sử dụng Requestdispacter.sendRedirect() HOẶC somthing khác không?

Cảm ơn,

  • Anand

Trả lời

3

Có một cái gì đó gọi là session replication. Nó được sử dụng trong các cụm để có tất cả các nút cụm sử dụng cùng một thông tin phiên. Đọc trang web được liên kết hoặc các tài nguyên khác về cách hoạt động sao chép phiên, nếu bạn tò mò.

Nhưng các hệ thống không cần chia sẻ đối tượng toàn bộ phiên. Trong trường hợp của bạn có vẻ như bạn đang rời khỏi một máy chủ và sau đó quay trở lại mà không cần bất kỳ điều trị phiên đặc biệt nào. Phiên này không bao giờ đóng cửa. Như thể bạn đã đăng nhập vào trang web thư yêu thích trên web của mình, sau đó chuyển đến một trang hoàn toàn khác và quay lại trang web thư trên web của bạn. Phiên họp vẫn còn đó. Bạn vẫn đang đăng nhập.

Vì vậy, có thể trang web IRCTC chuyển một số thông tin đến trang web ngân hàng CITI, yêu cầu CITI xử lý yêu cầu cùng với mã thông báo (chỉ một số trong trường hợp đơn giản nhất). Khi ngân hàng CITI được thực hiện, nó gọi một máy chủ IRCTC với mã kết quả và mã thông báo. Sử dụng mã thông báo máy chủ IRCTC có thể kết hợp mã kết quả với phiên của bạn. Sau đó, ngân hàng CITI chỉ chuyển hướng trình duyệt của bạn đến trang IRCTC. Máy chủ có phiên cập nhật có thể trình bày cho bạn trang tiếp theo trong quy trình đặt hàng của bạn.

+0

Tôi không nghĩ rằng cổng thanh toán duy trì phiên người dùng cá nhân từ các ngân hàng khác nhau .... – Thihara

+0

@ Eduard, Trong trường hợp này nó không thể được nhân rộng phiên như IRCTC và CITIBANK là khác nhau oraganization vì vậy họ không phải có phiên sao chép. –

+0

2 bình luận ở trên là đúng.But, vẫn cảm ơn cho khái niệm nhân rộng của bạn.Tôi đã học được từ nó. –

0

Bạn có thể nói rằng phiên người dùng giống nhau ở cả hai máy chủ như thế nào?

Tôi sẽ giả định rằng bạn đang nói về các tùy chọn cổng thanh toán và chức năng của chúng.

Điều thường xảy ra là bạn gửi cuộc gọi dịch vụ web và chuyển hướng người dùng đến URL của cổng thanh toán, sẽ xử lý các chi tiết giao dịch.

Sau đó, ngân hàng ban đầu nhận được phản hồi dịch vụ web cổng thanh toán với chi tiết giao dịch.

Luồng này thay đổi đôi chút trên các cổng khác nhau. Tuy nhiên điều quan trọng nhất là họ sẽ không duy trì một phiên cho bạn người dùng trong máy chủ của họ, nếu họ đang duy trì một phiên ở tất cả sau đó nó sẽ được cho trang web IRCTC.

1

KHÔNG có phiên nào được chia sẻ giữa IRCTC và ngân hàng CITI tại đây. IRCTC yêu cầu gửi ngân hàng CITI thông qua hình thức nộp trên ngân hàng CITI và số tiền thanh toán và những thứ khác được gửi dưới dạng tham số ẩn trong biểu mẫu đó (ofcourse, thông qua cơ chế bảo mật, giống như một số hashcode của các giá trị được gửi).

Sau khi thanh toán được thực hiện thành công, ngân hàng citi gửi biểu mẫu tới URL IRCTC (url trả về do IRCTC cung cấp). với các chi tiết (như thành công/lỗi) trong tham số ẩn. IRCTC xử lý và hiển thị màn hình thành công/lỗi.

Ngoài ra, Phiên trong ứng dụng mẹ của bạn không bao giờ bị giết trong trường hợp này. Phiên có thể kết thúc bằng một trong các cách sau:

1. Session time out 
2. Logout 
3. Application destroys the session 

Trong trường hợp này, không có sự cố nào xảy ra và phiên người dùng vẫn còn trong trình duyệt và ứng dụng.

Nếu ứng dụng có nhiều hơn một máy chủ, thì phiên được chia sẻ giữa chúng sử dụng cơ chế sao chép phiên mà máy chủ cung cấp.

Ngoài ra, máy chủ web yêu cầu cùng một máy chủ (cho id phiên) và chỉ gọi một máy chủ ứng dụng khác khi máy chủ gốc không thể truy cập được, trong trường hợp đó, phiên sao chép đến để giải cứu người dùng.

+0

Giả sử IRCTC sử dụng thanh chống (Jsp/Servlets), thành phần thanh chống mất khả năng gửi thông tin chi tiết của IRCTC tới ngân hàng Citi và nhận lại lệnh rút tiền từ ngân hàng CITI cho IRCTC. Có thể sử dụng Requestdispacter.sendRedirect() HOẶC somthing khác không? –

+0

@sikorski rằng nhận xét không phải là bản cập nhật! Đó là một câu hỏi. –

+0

sai lầm của tôi ... tôi đã hiểu sai. – Sikorski

0

Có một số thứ gọi là Di chuyển phiên, trong đó một LBS (Load Balancing Server) có sẵn để nhận nhiều yêu cầu và liên hệ với nhiều máy chủ ứng dụng.Và đôi khi một yêu cầu người dùng có thể được chia sẻ cho một số máy chủ mà nhiều người dùng yêu cầu cho cùng một điều. Rõ ràng máy chủ nơi yêu cầu sẽ đi phải được miễn phí. sau đó LBS nhận yêu cầu thứ nhất và chuyển tiếp tới máy chủ miễn phí, nơi phiên obj đã tạo cho người dùng đó. bây giờ yêu cầu thứ 2 là chuyển tiếp đến máy chủ thứ hai. Nhưng máy chủ thứ hai muốn chia sẻ phiên người dùng thứ nhất Obj để thời gian chúng ta phải di chuyển từ phiên 1 đến phiên 2. Nó có hai sự kiện sẽ xảy ra sự kiện thụ động và sự kiện kích hoạt. chúng tôi phải sử dụng một Listener HttpSessionActivationListener và phải thực hiện void sessionWillPasivate() và void sessionDidActivate()