Socket.IO-nodejs && Opera
Связка Socket.IO и NodeJS у меня отлично работала во всех браузерах, кроме оперы, т.к. транспорт по умолчанию там шёл XHR, пишу проблемы которые были с разными типами транспорта:
- XHR - выдавало ошибку безопасности при посылке запроса - JSONP - сообщения от сервера до оперы шли, а вот от оперы до сервера нет - FlashSocket - происходил connect и тут же disconnect - WebSocket - с ним всё работает отлично (!) Инструкция по изменению типа транспорта Socket.IO в Opera: В комбинированном файле socket.io.js можно увидеть деление файла на транспорты такого вида(пример с WebSocket): (function(){ var WS = io.Transport.websocket = function(){ io.Transport.apply(this, arguments); }; ....... }) У каждого транспорта есть функция проверки на доступность в браузере пример: WS.check = function(){...} У меня была версия Socket.IO '0.7pre', там самым первым шёл транспорт XHR, функцию check() я изменил так: XHR.check = function(xdomain){ if(io.util.opera) return false; //(!!! Если браузер опера, то не использовать) try { if (request(xdomain)) return true; } catch(e){} return false; }; А вот с WebSocket наоборот: WS.check = function(){ if(io.util.opera) return true; //(!!! Если браузер опера, то использовать) return 'WebSocket' in window && WebSocket.prototype && ( WebSocket.prototype.send && !!WebSocket.prototype.send.toString().match(/native/i)) && typeof WebSocket !== "undefined"; }; Аналогично можно поступать с другими транспортами, только делать нужно с умом. Таким образом Socket.IO можно настроить под все основные браузеры(Opera, FireFox, Safari, Chrome, IE). У меня после таких изменения стало работать везде. Надеюсь тем кто столкнётся с этой проблемой эта инструкция поможет. |
Вообще, 0.7 еще неотрелизена, и это не случайно. Лучше пользуйтесь пока 0.6..
|
Часовой пояс GMT +3, время: 07:48. |