Использование WebSocket для передачи файлов

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

сервер я использую это узел.js, а мой браузер-Google Chrome 16.

2 ответов


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

после того, как вы получили Javascript или CSS через WebSocket, вы можете загрузить их, используя следующий механизм (где тип - либо "скрипт", либо '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 и ранее, но поскольку вы используете WebSockets, я подозреваю, что ваша цель-современные браузеры. Вы можете убедиться, что функция dynamic_load работает с консоли Javascript Вашего браузера:

dynamic_load('script', "alert('hello world');");

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

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