域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)
今天來(lái)整理一些我在工作中配置上遇到的一些問(wèn)題。
Q1使用nginx代理后不能訪問(wèn)。報(bào)錯(cuò)WARNING:tornado.access:400 GET /ws (127.0.0.1) 0.79ms 或者連接失敗后會(huì)反復(fù)發(fā)起連接請(qǐng)求。
需要在nginx的location中新增如下配置
# websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Q2 跨域問(wèn)題(spring websocket)
經(jīng)查閱官方文檔springwebsocket 4.1.5版本前默認(rèn)支持跨域訪問(wèn),之后的版本默認(rèn)不支持跨域,需要設(shè)置
.setAllowedOrigins(“*”)
@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配置導(dǎo)致sockjs失效問(wèn)題(spring websocket)
web.xml中添加如下配置
dispatcher
/sockjs/*
websocket配置類中路徑中不加sockjs
registry.addHandler(myWebSocketHandler(), "/echo").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor())
.withSockJS();
前端調(diào)用時(shí)應(yīng)加上sockjs
websocket = new SockJS("http://127.0.0.1:8080/WebSocketTest001/sockjs/echo");
Q4 一個(gè)websocketsession對(duì)應(yīng)多個(gè)session的情況
這是由于盡管每次都能保證有一個(gè)websocketsession存在,但客戶端沒(méi)連接一次tomcat都建立一個(gè)鏈接,除非你在請(qǐng)求頭里添加cookie:JSESSIONID=xxxxxx
Q5 能收到客戶端消息,后臺(tái)也顯示發(fā)送,但是客戶端收不到
這個(gè)問(wèn)題經(jīng)我個(gè)人觀察和猜測(cè),應(yīng)該是websocketsession沒(méi)有成功關(guān)閉或者成功關(guān)閉但是和一個(gè)websocketsession對(duì)應(yīng)多個(gè)session有關(guān),因?yàn)槲野焉厦娴膯?wèn)題解決了之后,這個(gè)問(wèn)題也沒(méi)出現(xiàn)過(guò)了。
如果你們覺(jué)得自己或者團(tuán)隊(duì)弄WebSocket這塊比較麻煩,或者開(kāi)發(fā)成本高,周期長(zhǎng)的話,可以考慮用三方的。
我這里只推薦個(gè)免費(fèi)的 GoEasy 你們自己可以去看看。
希望這些問(wèn)題的解決方法對(duì)大家有幫助
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!