Utilisation de WebSocket pour le transfert de fichiers

un de mes professeurs d'université a souligné qu'il serait intéressant de voir des WebSockets utilisés pour le transfert de fichiers. J'imagine qu'il serait possible de décoder et encoder un fichier image en utilisant base64, cependant serait-il possible d'envoyer des fichiers JavaScript / CSS via WebSocket?

le serveur que j'utilise est Node.js, et mon navigateur est Google Chrome 16.

7
demandé sur Jack 2012-02-10 02:50:08

2 réponses

Oui. Vous pouvez envoyer JavaScript et CSS via WebSockets (ou AJAX d'ailleurs). Vous ne devriez pas non plus avoir besoin de base64 Encoder le CSS et JavaScript comme vous le feriez pour une image tant que le serveur WebSocket est correctement UTF-8 encodant tous les caractères Unicode spéciaux dans le Javascript.

une fois que vous avez reçu le Javascript ou CSS via WebSocket, vous pouvez les charger en utilisant le mécanisme suivant (où le type est soit "script", soit '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);
}

ce mécanisme peut avoir des problèmes dans IE 8 et plus tôt, mais puisque vous utilisez des WebSockets je soupçonne que votre cible est les navigateurs modernes. Vous pouvez vérifier que la fonction dynamic_load fonctionne à partir de la console Javascript de votre navigateur:

dynamic_load('script', "alert('hello world');");
8
répondu kanaka 2012-02-10 15:06:25

Mon nœud.la bibliothèque JS WS gère les envois de fichiers, même binaires. Découvrez l'un des exemples ici, qui n'téléchargements: https://github.com/einaros/ws/tree/master/examples/fileapi

plutôt que d'utiliser des websockets pour recevoir les ressources de la page Web (scripts, css, images, etc.), cependant, je recommande de rester avec SPDY -- qui a été conçu intentionnellement pour ce but. Nœud.js a le soutien de spdy, soit dit en passant (voir https://github.com/indutny/node-spdy).

1
répondu einaros 2012-02-11 15:37:09