WebSocket配置中會遇到的一些問題

今天來整理一些我在工做中配置上遇到的一些問題。前端

 

Q1使用nginx代理後不能訪問。報錯WARNING:tornado.access:400 GET /ws (127.0.0.1) 0.79ms  nginx

須要在nginx的location中新增以下配置web

# websocketspring

 proxy_http_version 1.1;跨域

 proxy_set_header Upgrade $http_upgrade;tomcat

 proxy_set_header Connection "upgrade";websocket

 

Q2 跨域問題(spring websocket)cookie

經查閱官方文檔springwebsocket 4.1.5版本前默認支持跨域訪問以後的版本默認不支持跨域須要設置session

.setAllowedOrigins(「*」)app

@Override

public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

registry.addHandler(myWebSocketHandler(), "/echo.do").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor());

                                                                                           

registry.addHandler(myWebSocketHandler(), "/echo").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor())

                      .withSockJS();

}

Q3 *.do配置致使sockjs失效問題(spring websocket)

web.xml中添加以下配置

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>/sockjs/*</url-pattern>

</servlet-mapping>

websocket配置類中路徑中不加sockjs

registry.addHandler(myWebSocketHandler(), "/echo").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor())
.withSockJS(); 

前端調用時應加上sockjs

websocket = new SockJS("http://127.0.0.1:8080/WebSocketTest001/sockjs/echo");

 

Q4 一個websocketsession對應多個session的狀況 
這是因爲儘管每次都能保證有一個websocketsession存在但客戶端沒鏈接一次tomcat都創建一個連接除非你在請求頭裏添加cookie:JSESSIONID=xxxxxx

 

Q5 能收到客戶端消息後臺也顯示發送可是客戶端收不到 
這個問題經我我的觀察和猜想應該是websocketsession沒有成功關閉或者成功關閉可是和一個websocketsession對應多個session有關由於我把上面的問題解決了以後這個問題也沒出現過了

 

若是大家以爲本身或者團隊弄WebSocket這塊比較麻煩,或者開發成本高,週期長的話,能夠考慮用三方的。

我這裏只推薦個免費的 GoEasy 大家本身能夠去看看。

網址:www.goeasy.io

相關文章
相關標籤/搜索