我的一位大学讲师指出,看到WebSockets用于文件传输会很有趣。我想使用base64对图像文件进行解码和编码是可能的,但是是否可以通过WebSocket发送JavaScript/CSS文件
我使用的服务器是Node.js,我的浏览器是Google Chrome 16。
是。您可以通过WebSockets(或者AJAX)发送JavaScript和CSS。您也不需要像对图像一样对CSS和JavaScript进行base64编码,只要WebSocket服务器正确地对JavaScript中的任何特殊Unicode字符进行UTF-8编码即可。
一旦您通过WebSocket收到Javascript或CSS,您就可以使用以下机制加载它们(其中类型为"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);
}
这种机制在IE8和更早版本中可能会遇到问题,但由于您使用的是WebSockets,我怀疑您的目标是现代浏览器。您可以从浏览器的Javascript控制台验证dynamic_load函数是否工作:
dynamic_load('script', "alert('hello world');");
我的node.js ws库处理文件发送,甚至是二进制文件发送。看看这里的一个例子,它可以上传:https://github.com/einaros/ws/tree/master/examples/fileapi
然而,与其使用websocket来接收网页资产(脚本、css、图像等),我建议坚持使用SPDY——它正是为此目的而精心制作的。Node.js支持spdy(请参阅https://github.com/indutny/node-spdy)。