2010-10-13 119 views
11

我有一個網站託管在localhost:8000。現在,我有一臺服務器在localhost:8001上監聽websocket連接。我想我的網站通過WebSocket的API連接到該服務器一樣Websockets問題,也許是同源策略?

var conn = new WebSocket('ws://localhost:8001'); 

但我在調用時

conn.send('something'); 

這看起來像得到鉻6.0.472.62一些錯誤:未捕獲的錯誤:INVALID_STATE_ERR: DOM異常11.

在Firefox 4(4.0b8pre),I得到的錯誤: 試圖使用一個對象,它是沒有,或不再,可用「代碼:」 11

我認爲這是在服務器上不支持websocket draft76的握手問題,但我使用http://github.com/miksago/node-websocket-server/tree/master/lib/ws/,聲稱支持draft75和draft76。

此外,初始握手似乎很好。在創建新的WebSocket時,我可以從服務器收到響應,但是,從客戶端調用「發送」時會出現問題。

這是一個問題,因爲我的HTTP服務器是在端口8000和websocket服務器在8001上是相同的來源策略?如果是這樣,我該如何解決這個問題?

回答

27

也許你需要等待onopen事件觸發?

var conn = new WebSocket('ws://localhost:8001'); 
conn.onopen = function (e) { 
    conn.send('something'); 
} 
conn.onmessage = function (e) { 
    console.log('got something: ' + e.data); 
} 

此外,它掛鉤的OnClose和onError的事件來說是個好主意。