2015-05-04 15 views
9

này hoạt động:WebSockets không làm việc mà không WebApp

String webappDir = "..."; 
context = tomcat.addWebapp("/", new File(webappDir).getAbsolutePath()); 

này không:

context = tomcat.addContext("/", new File("").getAbsolutePath()); 

Tôi không thực sự cần một webappDir trong trường hợp này bởi vì tôi không phục vụ bất kỳ trang JSP hoặc tài nguyên phía máy khách, tôi chỉ sử dụng response.getWriter().println(...); phía máy chủ.

Không có trường hợp ngoại lệ nào bị ném, websocket chỉ đơn giản là không mở.

Tôi có thể giả định rằng đây là lỗi tomcat không?

+2

Nếu bạn không cần ngữ cảnh ứng dụng web, bạn có thể sử dụng API Java cho WebSockets JSR 356 trực tiếp thay vì API websockets tomcat. – vzamanillo

+1

Bạn có thể tạo ứng dụng khách Java độc lập với JSR 356, để xây dựng một máy chủ, bạn có thể sử dụng bất kỳ thùng chứa máy chủ Java EE nào có hỗ trợ websockets, được nhúng hay không (GlassFish, Apache Tomcat, Jetty ...) để triển khai WebSocketServlet và lắng nghe cho tin nhắn của khách hàng. – vzamanillo

+1

Tôi nghĩ là không thể, API websockets được thiết kế để sử dụng ổ cắm trong các ứng dụng web, do đó bạn cần một thùng chứa, nếu bạn không cần một ứng dụng web không sử dụng ổ cắm web, chỉ cần sử dụng ổ cắm Java. – vzamanillo

Trả lời

1

Nếu bạn nhìn vào các bài kiểm tra (test/org/apache/tomcat/WebSocket trong mã nguồn), họ làm

tomcat.addContext("", null); 

Lưu ý rằng qua null thay vì một đường dẫn ngữ cảnh cần một Tomcat gần đây 8 (không quá vài tháng). Phiên bản hiện tại là 8.0.22.

Tôi có thể giả định rằng đây là lỗi tomcat không?

Quy tắc "trước khi gửi lỗi" là yêu cầu trên danh sách gửi thư của người dùng chứ không phải trên stackoverflow.

+1

Có, các thử nghiệm trong 8.0.21 sử dụng API đó. –

3

tốt, hai hàm này hoàn toàn khác nhau. Nếu bạn nhìn vào javadoc cho hàm addContext, bạn có thể thấy rằng, bạn cần thiết lập ngữ cảnh để có thể sử dụng websocket. điều này được lấy từ tài liệu api.

Thêm ngữ cảnh - chế độ lập trình, không sử dụng web.xml mặc định. Điều này có nghĩa là rằng không có hỗ trợ JSP (không có servlet JSP), không có servlet mặc định và không hỗ trợ socket web trừ khi được kích hoạt rõ ràng thông qua giao diện có lập trình.

Vì vậy, trong trường hợp của bạn, tôi đoán bạn có thể làm theo trường hợp kiểm tra trong link cách thêm điểm kết thúc này vào ngữ cảnh.

Để biết bạn có thể cho rằng đây có phải là lỗi hay không. Cá nhân, tôi không nghĩ đây là lỗi do chính nhà phát triển đã đề cập rằng họ không cung cấp kết nối ổ cắm web. Nhưng, để chắc chắn, bạn có thể liên lạc với họ và hỏi;).

+1

Tất nhiên bạn có thể sử dụng websocket.Những gì tôi có nghĩa là bạn cần nỗ lực nhiều hơn để thiết lập nó vì nó không đến "miễn phí". Nếu tôi có thời gian, tôi sẽ cố gắng để xem git repo của bạn. –

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