2008-09-07 39 views
6

Tôi đang sử dụng ngăn xếp Dịch vụ web Apache CXF. Khi một khách hàng hết thời gian chờ hoặc ngắt kết nối khỏi máy chủ trước khi hoàn tất thao tác, máy chủ sẽ tiếp tục chạy hoạt động cho đến khi nó hoàn tất. Tôi muốn máy chủ phát hiện khi máy khách ngắt kết nối và xử lý điều đó cho phù hợp.Phát hiện ngắt kết nối ứng dụng khách trong dịch vụ web

Có cách nào để phát hiện khi khách hàng ngắt kết nối bằng Apache CXF không? Điều gì về việc sử dụng các ngăn xếp dịch vụ web Java khác?

Trả lời

2

Tôi không quen với Apache CXF, nhưng những điều sau đây nên áp dụng cho bất kỳ khung công tác dựa trên Java Servlet nào.

Để xác định xem người dùng đã ngắt kết nối chưa (nút dừng, trình duyệt đã đóng, v.v.) máy chủ phải cố gắng gửi gói. Nếu kết nối TCP/IP đã bị đóng, IOException sẽ bị ngắt.

Về lý thuyết, một ứng dụng Java có thể gửi ký tự khoảng trắng tại các điểm khác nhau trong quá trình xử lý. An IOException sẽ báo hiệu rằng khách hàng đã biến mất và việc xử lý có thể bị hủy bỏ.

Tuy nhiên, có thể có một vài vấn đề với kỹ thuật này:

  1. Sending nhân vật trong chế biến sẽ gây ra phản ứng là "cam kết", do đó nó có thể là không thể để thiết lập tiêu đề HTTP, cookies, vv dựa trên kết quả của quá trình xử lý serverside dài.

  2. Nếu luồng đầu ra được đệm, ký tự khoảng trắng sẽ không được gửi ngay lập tức, do đó không thực hiện kiểm tra đầy đủ. Có thể sử dụng flush() làm giải pháp thay thế. Có thể khó thực hiện kỹ thuật này cho một công nghệ khung hoặc công nghệ xem nhất định (JSP, v.v.) Ví dụ, mã hiển thị trang sẽ không thể gửi loại nội dung sau khi phản hồi đã được thực hiện.

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