2010-10-13 55 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的事件来说是个好主意。