我遇到的问题是我不知道如何能够判断我要发回的数据客户端以gzip格式压缩。看着我的服务器的命令行我看到的输出:以gzip格式从node.js服务器向客户端发送socket.io响应数据
debug - websocket writing 3:::{"result":1368673052397}
debug - websocket writing 3:::{"result":1368673053399}
...
对我来说,这看起来像服务器写入ASCII码的形式响应,而不是在发送前先进行压缩。
以下是我为编写这些结果而编写的示例。从我读过的内容来看,只要我设置了“浏览器客户端gzip”,我的回复应该会被发送到gzip。如果他们不是这样做,如果我怎么能从服务器的调试信息中知道他们实际上是压缩响应。
当我启动我的BASH使用下面的命令服务器:
$ NODE_ENV =生产节点app.js
var express = require('express'),
http = require('http');
var app = express(),
server = http.createServer(app),
io = require('socket.io').listen(server);
io.configure('production', function() {
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');
io.set('log level', 3);
});
app.use(express.logger('dev'));
app.get('/', function(req, res) {
res.send(
"<script src='/socket.io/socket.io.js'></script>\n"+
"<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script>\n"+
"<script>\n"+
"var socket=io.connect('http://127.0.0.1:3000');\n"+
"socket.on('message', function(data) {\n"+
" $(\"h2\").text(data);\n"+
"});\n"+
"</script>\n"+
"<h1>"+process.env.NODE_ENV+"</h1>\n"+
"<h2></h2>\n"
);
});
server.listen('3000');
io.sockets.on('connection', function(webSocket) {
function whileLoop() {
setTimeout(function() {
var epoch = (new Date).getTime();
var jsonData = "{\"result\":"+epoch+"}";
webSocket.send(jsonData);
whileLoop();
}, 1000);
}
whileLoop();
});
你可以简单地放气JSON和使用像zip.js或jszip一个lib膨胀的客户端 - 字符串结束。 – dandavis
@dandavis我下载了jszip,并且我已经在服务器端使用zlib获得了deflate部分,我可以将压缩数据发送到客户端base64编码,但是我似乎无法弄清楚如何对base64编码响应进行膨胀客户端。如果我使用jszip库,你能否向我发送index.html中需要的更新代码来处理这个问题? –
如果你在服务器上发送类似于base64的东西(deflate(JSON.stringify(str))),然后在客户端上使用JSON.parse(inflate(atob(data)))... – dandavis