2010-02-03 14 views
14

Tôi đã xem xét WebSockets tuần trước và đã thực hiện một vài suy nghĩ về cách triển khai phía máy chủ với API Servlet Java. Tôi không dành quá nhiều thời gian, nhưng chạy vào các vấn đề sau đây trong một vài thử nghiệm với Tomcat, mà dường như không thể giải quyết mà không cần vá container hoặc ít nhất là làm cho những sửa đổi cụ chứa đến việc thực hiện HttpServletResponse:WebSockets được Servlet Container phục vụ

  • Đặc tả WebSocket ủy nhiệm một thông báo được xác định trong phản hồi 101 HTTP. HttpServletResponse.setStatus (int code, String message) không được dùng nữa mà không đề cập đến một sự thay thế có thể sử dụng được. Sau khi thay đổi cấu hình Tomcat mặc định, tôi đã Tomcat tôn trọng chuỗi thông điệp của tôi, nhưng vì phương thức này không được chấp nhận, tôi không chắc chắn nếu điều này sẽ làm việc với các thùng chứa servlet khác.

  • Đặc tả WebSocket yêu cầu thứ tự được chỉ định của một vài tiêu đề đầu tiên trong phản hồi HTTP cho yêu cầu nâng cấp kết nối. API servlet không cung cấp một phương thức để xác định thứ tự của các tiêu đề phản hồi và Tomcat thêm các tiêu đề của chính nó vào phản hồi, đặt một vài tiêu đề của chúng trước bất kỳ tiêu đề nào, được bổ sung bởi việc thực thi servlet.

  • Do độ dài nội dung của phản hồi không được biết khi cam kết tiêu đề, Tomcat sẽ tự động chuyển sang mã hóa truyền chunked cho phản hồi, không tương thích với đặc tả WebSocket.

Tôi có thiếu thứ gì đó hiển nhiên hoặc thực sự không thể tích hợp điểm cuối máy chủ WebSocket trong ứng dụng web dựa trên servlet?

+1

Tôi đã gặp phải khá nhiều vấn đề tương tự. Tôi thực sự muốn mở rộng Tomcat, để cho thấy cách tôi muốn một "WebSocket Servlet" trông như thế nào, khi nó được thêm vào các đặc tả Java EE. Để xem cách tôi tấn công Tomcat, bạn có thể xem các bản vá tại http://java.dzone.com/articles/tomcat-websockets-html5 –

Trả lời

-3

Có có một rất tốt (mã nguồn mở và hoàn toàn miễn phí): http://www.jWebSocket.org

+1

Không, jWebSocket không phải dựa trên servlet. – jarnbjo

8

Có một thực hiện trong Jetty. Chúng tôi có thể hy vọng rằng tomcat và cầu cảng tìm thấy một API tương thích.

+1

Tôi biết, nhưng tôi ít nhiều hy vọng rằng sự hỗ trợ WebSocket có thể thực hiện được bằng cách sử dụng API Servlet tiêu chuẩn và không phải bằng cách sử dụng bất kỳ tiện ích mở rộng cụ thể nào của vùng chứa. – jarnbjo

+0

Tôi hiểu. Sau đó, chỉ có Servlet 3.0 spec là một giải pháp. Hiện tại spec là bản beta (tôi nghĩ). Nhưng đã có một số triển khai của spec. Tất nhiên trong phiên bản beta. – Horcrux7

+1

liên kết đã chết ... –

6

Dự án Glassfish Atmosphere sẽ làm những gì bạn muốn. Có một servlet bạn có thể định nghĩa để thực hiện tất cả công việc.

0

jWebSocket tuyên bố chạy dưới dạng ứng dụng Tomcat. Rất tiếc, một số tệp bị thiếu trong phân phối nhị phân của jWebSocket. Một số người đang cố gắng biên dịch lại jWebSocket và nhận các tệp cần thiết vì mã nguồn có sẵn. Tất cả trong tất cả, jWebSocket dường như không phải là một sản phẩm đáng tin cậy.

+0

tôi đang có cùng trải nghiệm – fransvn