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?
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 –