Websocket API не поддерживается по умолчанию во всех браузерах на данный момент (насколько мне известно), он должен работать на Chromium, хотя попробуйте протестировать его на Chromium или Firefox (после редактирования настроек по умолчанию) и посмотреть, не переходит ли он к XHRPolling.
Я запускаю его на другом IP, так как мне нужно запустить узел на порту 80, что вызывает конфликт на моем веб-сервере с Apache. Разве веб-сокеты / flashsockets не могут использоваться кросс-домен?
Теперь здесь может быть две разные причины ошибки
Разъемы Web / Flash не позволят вам подключиться к клиенту node.js, если вы не укажете другой порт, такой как 81, или специально не укажете apache для передачи входящего запроса на узел.
простое решение - написать HTTP-сервер на базе Node.js для простой передачи данных из Apache (и настроить Apache для запуска на другом порту, отличном от 80)
Эта ссылка рассказывает, как это сделать ... в этом процессе вы можете заставить Node.js сделать что-то вроде проверки, поступает ли запрос от websocket / httpbrowser, если браузер http перенаправляет запрос на Apache, если нет, т.е. если это из веб / флеш-сокетов, то обрабатывайте сокет соответствующим образом или как прокомментировал вопрос. Укажите APACHE для прокси для Node.js.
Flashsockets требует от вас предоставления файла политики междоменного доступа на порт 843. Вы уверены, что предоставляете файл междоменного домена? (Я думаю, что для этого в socket.io есть встроенная функциональность, но всегда полезно проверять.)
Как сказано на основном сайте socket.io
Чтобы обеспечить подключение в реальном времени для каждого браузера, Socket.IO выбирает наиболее эффективный транспорт во время выполнения, не затрагивая API.
- WebSocket
- Adobe® Flash® Socket
- AJAX длинный опрос
- AJAX многочастная потоковая передача
- Навсегда Iframe
- JSONP Polling
Совершенно очевидно, что он вернется к AJAX Long Polling, если веб-сокеты отключены и Adobe Flash Socket не сможет подключиться (это может быть связано с недоступностью файла политики).
Вот пример кода для междоменного файла, который вы можете включить в свой код и посмотреть, заставляет ли ваш сервер работать с веб-сокетами.
var net = require("net");
// Node.js
var Policy = net.createServer(function(socket)
{
socket.setEncoding('utf8');
socket.on('connect',function(){
console.log("Policy Request");
socket.end("<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" secure=\"false\"/></cross-domain-policy>");
});
});
Policy.listen(843);