Использование WebSocket для передачи файлов - PullRequest
7 голосов
/ 10 февраля 2012

Один из моих преподавателей в университете отметил, что было бы интересно увидеть WebSockets, используемые для передачи файлов. Я полагаю, что было бы возможно декодировать и кодировать файл изображения, используя base64, однако возможно ли будет отправлять файлы JavaScript / CSS через WebSocket?

Используемый мной сервер - Node.js, а мой браузер - Google Chrome 16.

Ответы [ 2 ]

8 голосов
/ 10 февраля 2012

Да .Вы можете отправить JavaScript и CSS через WebSockets (или AJAX в этом отношении).Вам также не нужно кодировать base64 CSS и JavaScript, как если бы вы были изображением, если сервер WebSocket должным образом кодирует UTF-8 и кодирует любые специальные символы Unicode в Javascript.

После получения Javascriptили CSS через WebSocket, вы можете загрузить их, используя следующий механизм (где типом является 'script' или 'css'):

function dynamic_load(type, content) {
    var elem = document.createElement(type);
    elem.type = (type === 'script') ? 'text/javascript' : 'text/css';
    elem.innerHTML = content;
    document.getElementsByTagName("head")[0].appendChild(elem);
}

Этот механизм может иметь проблемы в IE 8 и более ранних версиях, но так как выя подозреваю, что ваша цель - современные браузеры.Вы можете убедиться, что функция dynamic_load работает из консоли Javascript вашего браузера:

dynamic_load('script', "alert('hello world');");
1 голос
/ 11 февраля 2012

Моя библиотека node.js ws обрабатывает отправку файлов, даже двоичных. Посмотрите один из примеров, который загружает: https://github.com/einaros/ws/tree/master/examples/fileapi

Однако вместо использования веб-сокетов для получения ресурсов веб-страницы (сценариев, CSS, изображений и т. Д.) Я бы порекомендовал придерживаться SPDY - который специально был создан для этой цели. Кстати, у Node.js есть поддержка spdy (см. https://github.com/indutny/node-spdy).

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