在實踐中我遇到stompjs, websocket和nginx的問題與總結

NO IMAGE

閱讀原文:https://wdd.js.org/stomp-over…

1. AWS EC2 不支援WebSocket

直達解決方案 英文版

簡單說一下思路:WebSocket底層基於TCP協議的,如果你的伺服器基於HTTP協議暴露80埠,那WebSocket肯定無法連線。你只要將HTTP協議修改成TCP協議就可以了。

2. NGINX做反向代理是需要注意的問題

如果排除所有問題後,那剩下的問題可以考慮出在反向代理上,一下有幾點是可以考慮的。

HTTP的版本問題: http有三個版本,http 1.0, 1.1, 2.0, 現在主流的瀏覽器都是使用http 1.1版本,為了保證更好的相容性,最好轉發時不要修改協議的版本號

路徑重寫的編解碼問題: NGINX具有路徑重寫功能,如果你使用了該功能,就要考慮問題可能出在這裡,因為NGINX在路徑重寫時,需要對路徑進行編解碼,有可能在解碼之後,沒有編碼就傳送給後端的伺服器,導致後端伺服器無法對URL進行解碼。

3. IE8 IE9 有沒有簡單方便支援WebSocket的方案

目前測試下來,最簡單方案是基於flash的。參考:https://github.com/gimite/web…

注意該方案需要在WebSocket服務上的843埠, 提供socket_policy_files, 也可以參考:A PolyFill for WebSockets

網上也有教程是使用socket.io基於ajax長輪訓的方案,如果服務端已經確定的情況下,一般是不會輕易改動服務端程式碼的。而且ajax長輪訓也是有延遲,和disconnect時,無法回撥的問題。

4. stompjs connected後,沒有呼叫connect_callBack

該問題主要是使用web-socket-js,在ie8,ie9上出現的

該問題還沒有分析出原因,但是看了stompjs的原始碼不是太多,明天用原始碼除錯看看原因。

具體原因已經找到,參考https://github.com/wangduandu…

5. 參考文獻

STOMP Over WebSocket
STOMP Protocol Specification, Version 1.1

Stomp Over Websocket文件,