Проблема с веб-сокетами, возможно, такая же политика происхождения? - PullRequest
11 голосов
/ 13 октября 2010

У меня есть сайт, размещенный на localhost: 8000.Теперь у меня есть сервер, прослушивающий соединения websocket на localhost: 8001.Я хотел бы, чтобы мой веб-сайт подключался к этому серверу через API веб-сокета, например

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

Но я получаю некоторые ошибки в Chromium 6.0.472.62 при вызове

conn.send('something'); 

Это выглядит так:Ошибка: INVALID_STATE_ERR: DOM Exception 11.

В Firefox 4 (4.0b8pre) я получаю сообщение об ошибке: Предпринята попытка использовать объект, который не является или больше не является пригодным для использования "кодом:" 11

Я думал, что это проблема с рукопожатием, не поддерживающим websocket draft76 на сервере, но я использую http://github.com/miksago/node-websocket-server/tree/master/lib/ws/, который утверждает, что поддерживает draft75 и draft76.

Кроме того, первоначальное рукопожатие работает нормально.Я могу получить ответ от сервера при создании нового WebSocket, однако проблемы возникают при вызове «send» со стороны клиента.

Это проблема с той же политикой происхождения, поскольку мой httpserverна порт 8000 и сервер веб-сокета на 8001?Если так, как я могу обойти это?

1 Ответ

27 голосов
/ 14 октября 2010

Возможно, вам нужно подождать, пока не сработает событие 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...