使用WebSocket进行文件传输

时间:2012-02-09 22:50:08

标签: javascript websocket

我的一位大学讲师指出,看到用于文件传输的WebSockets会很有趣。我想可以使用base64对图像文件进行解码和编码,但是否可以通过WebSocket发送JavaScript / CSS文件?

我使用的服务器是Node.js,我的浏览器是Google Chrome 16.

2 个答案:

答案 0 :(得分:8)

即可。您可以通过WebSockets(或AJAX)发送JavaScript和CSS。只要WebSocket服务器正确地对Javascript中的任何特殊Unicode字符进行UTF-8编码,您也不需要像对图像一样对CSS和JavaScript进行base64编码。

通过WebSocket收到Javascript或CSS后,您可以使用以下机制加载它们(其中type是'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及更早版本中可能有问题,但由于您使用的是WebSockets,我怀疑您的目标是现代浏览器。您可以从浏览器的Javascript控制台验证dynamic_load函数是否有效:

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

答案 1 :(得分:1)

我的node.js ws库处理文件发送 - 甚至是二进制文件。查看此处的其中一个示例,它会上传:https://github.com/einaros/ws/tree/master/examples/fileapi

不是使用websockets接收网页资产(脚本,CSS,图像等),我建议坚持使用SPDY - 这是为了这个目的而故意制作的。顺便说一句,Node.js有spdy支持(参见https://github.com/indutny/node-spdy)。