Ответ 1
API-интерфейс Websocket по умолчанию не поддерживается во всех браузерах (по моим сведениям), он должен работать на хроме, хотя попробуйте проверить его на хроме или firefox (после редактирования настроек по умолчанию) и посмотреть, не изменилось ли это до XHRPolling.
Я запускаю его на другом IP-адресе, поскольку мне нужно запустить node на порт 80, который вызывает конфликт на моем веб-сервере с Apache. Могут ли websockets/flashsockets не использовать кросс-домен?
Теперь может быть две разные причины ошибки здесь
-
Web/Flash Sockets не позволят u подключиться к клиенту node.js, если ни один из них не укажет другой порт, например 81 или u, специально укажите apache для проксирования входящего запроса на node. простым решением может быть запись HTTP-сервера node.js, чтобы просто передать данные из Apache (и установить Apache для запуска на другом порту, а затем 80)
Эта ссылка рассказывает, как это сделать... в этом процессе вы можете сделать node.js сделать что-то вроде проверки, является ли запрос из websocket/httpbrowser, если это HTTP-браузер пересылает запрос Apache, если нет, то есть, если это из веб-флеш-сокетов, тогда обработайте сокет соответствующим образом. или как прокомментировал вопрос. Укажите APACHE для прокси-сервера node.js.
-
Flashsockets требует, чтобы вы выполняли файл политики crossdomain на порт 843, уверены ли вы, что вы предоставляете файл кросс-домена? (Я думаю, что socket.io имеет встроенную функциональность, чтобы сделать это, но все равно его всегда хорошо проверять.)
Как сказано на главном веб-сайте socket.io
Чтобы обеспечить связь в реальном времени в каждом браузере, Socket.IO выбирает наиболее способный транспорт во время выполнения, не затрагивая API.
- WebSocket
- Разъем Adobe® Flash®
- Длительный опрос AJAX
- Многопоточная потоковая передача AJAX
- Forever Iframe
- Опрос JSONP
Довольно ясно, что он вернется к 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);