2015-05-04 72 views
9

這工作:的WebSockets沒有Web應用程序

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

這不:

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

我並不真的需要一個webappDir在這種情況下,因爲我沒有投放任何JSP頁面或客戶端資源,我只使用response.getWriter().println(...);服務器端。

沒有任何異常被拋出,websocket根本無法打開。

我可以假設這是一個tomcat錯誤嗎?

+2

如果您不需要Web應用程序上下文,則可以直接使用Java API for WebSockets JSR 356而不是使用tomcat websockets API。 – vzamanillo

+1

您可以使用JSR 356創建您的客戶端作爲獨立的Java應用程序,構建一個服務器,您可以使用任何具有Websocket支持的嵌入式或不嵌入式(GlassFish,Apache Tomcat,Jetty)的Java EE服務器容器來部署WebSocketServlet並監聽用於客戶端消息。 – vzamanillo

+1

我認爲這是不可能的,websockets API被設計爲在web應用程序中使用套接字,所以你需要一個容器,如果你不需要一個web應用程序不要使用websockets,只需使用Java套接字。 – vzamanillo

回答

1

如果你看看測試(測試/組織/阿帕奇/ tomcat的/ WebSocket的源代碼),他們做

tomcat.addContext("", null); 

注意,通過null,而不是一個上下文路徑需要一個最近的Tomcat 8(不超過幾個月)。目前的版本是8.0.22。

我可以假設這是一個tomcat的bug嗎?

「提交bug之前」的規則是在用戶的郵件列表上詢問,而不是在stackoverflow上。

+1

是的,8.0.21中的測試使用該API。 –

3

好吧,那兩個是完全不同的功能。如果你看看函數addContext的javadoc,你可以看到,你需要設置上下文才能使用websocket。這是從api文檔中檢索的。

添加上下文 - 編程模式,不使用默認web.xml。這意味着 沒有JSP支持(沒有JSP servlet),沒有默認servlet和 沒有web套接字支持,除非通過編程接口明確啓用。

因此,在你的情況下,我想你可以按照這個link中的測試用例如何在上下文中添加一個終點。

至於你是否可以認爲這是一個錯誤。就個人而言,我不認爲這是一個錯誤,因爲開發人員本身已經提到他們不提供Web套接字連接。但是,爲了確保,你可以聯繫他們並詢問;)。

+1

當然你可以使用websocket。我的意思是,你需要更多的努力來設置它,因爲它不會「免費」。如果我有時間,我會試着去看你的git回購。 –

相關問題