2016-09-27 43 views
0

我正在嘗試在Spring 4中使用websocket Java。我創建了一個服務器處理程序。 這裏是我的代碼Websocket Spring 4

import java.util.logging.Logger; 
 

 
import org.springframework.web.socket.CloseStatus; 
 
import org.springframework.web.socket.WebSocketMessage; 
 
import org.springframework.web.socket.WebSocketSession; 
 
import org.springframework.web.socket.handler.TextWebSocketHandler; 
 

 
public class ServerHandler extends TextWebSocketHandler{ 
 
\t 
 
\t private Logger logger = Logger.getLogger(this.getClass().getName()); 
 
\t 
 
\t @Override 
 
\t public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { 
 
\t \t // TODO Auto-generated method stub 
 
\t \t logger.info("Connection clodes with websocket server: session id " + session.getId()); 
 
\t } 
 
\t 
 
\t @Override 
 
\t public void afterConnectionEstablished(WebSocketSession session) throws Exception { 
 
\t \t // TODO Auto-generated method stub 
 
\t \t logger.info("Connected user with websocket server: session id " + session.getId()); 
 
\t } 
 
\t 
 
\t @Override 
 
\t public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { 
 
\t \t // TODO Auto-generated method stub 
 
\t \t 
 
\t \t super.handleMessage(session, message); 
 
\t } 
 
\t 
 
\t @Override 
 
\t public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { 
 
\t \t // TODO Auto-generated method stub 
 
\t \t super.handleTransportError(session, exception); 
 
\t } 
 
}

接下來,我創建了一個WebSocket的配置者。下面是代碼

import org.springframework.context.annotation.Bean; 
 
import org.springframework.context.annotation.Configuration; 
 
import org.springframework.web.socket.config.annotation.EnableWebSocket; 
 
import org.springframework.web.socket.config.annotation.WebSocketConfigurer; 
 
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; 
 

 
@Configuration 
 
@EnableWebSocket 
 
public class WebsocketConfig implements WebSocketConfigurer{ 
 

 
\t 
 
\t @Override 
 
\t public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
 
\t \t registry.addHandler(myHandler(), "/websocket").withSockJS(); 
 
\t \t 
 
\t } 
 
\t 
 
\t @Bean 
 
    public ServerHandler myHandler() { 
 
     return new ServerHandler(); 
 
    } 
 
\t 
 
}

在我的客戶(JavaScript的),我試圖連接到服務器

var sock = new SockJS('http://localhost:9999/websocket');

,當我試圖執行客戶端,我有404錯誤 問題在哪裏?

+0

你有沒有找到解決這個問題的辦法? –

回答

0

將@Controller註釋添加到WebsocketConfig類,以便它可以處理來自客戶端的請求。

@EnableWebSocket 
@Controller 
public class WebsocketConfig implements WebSocketConfigurer{ 

並設置setAllowedOrigins()以避免與不同域連接時出錯。

registry.addHandler(myHandler(), "/websocket").setAllowedOrigins("*").withSockJS(); 
+0

更新後,我得到了另一個錯誤:XMLHttpRequest無法加載http:// localhost:9999/websocket/info?t = 1474989961280。請求的資源上沒有「Access-Control-Allow-Origin」標題。原因'http:// localhost:8081'因此不被允許訪問。響應的HTTP狀態代碼爲404. –

+0

我已經刪除了WebsocketConfig中的@Configuration註釋 –

+0

您是否按照我在上面的答案中給出的方式設置了setAllowedOrigins(「*」)? – abaghel