2012-02-09 2 views
6

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

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

ответ

8

Да. Вы можете отправлять JavaScript и CSS через WebSockets (или AJAX, если на то пошло). Вам также не нужно, чтобы base64 кодировал CSS и JavaScript так же, как и изображение, если сервер WebSocket правильно кодирует UTF-8 любые специальные символы Unicode в 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');"); 
+0

Вы можете отправить все и вся. Вы ничего не можете отправить, даже вирусы. – Pacerier

1

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

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

+0

SPDY устарел и скоро будет удален. – Pacerier

Смежные вопросы