【发布时间】:2013-05-10 06:15:22
【问题描述】:
我遇到的问题是我不知道如何判断我发送回客户端的数据是否以 gzip 格式压缩。从我看到的命令行查看我的服务器的输出:
debug - websocket writing 3:::{"result":1368673052397}
debug - websocket writing 3:::{"result":1368673053399}
...
在我看来,服务器正在以 ascii 格式编写响应,而不是在发送之前先对其进行压缩。
以下是我为产生这些结果而编写的示例。从我读到的内容来看,只要我设置了“浏览器客户端 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 之类的库来扩展客户端上的字符串。
-
@dandavis 我下载了 jszip,我已经使用 zlib 在服务器端使用了 deflate 部分,我可以将压缩数据发送到经过 base64 编码的客户端,但我似乎无法弄清楚如何膨胀客户端上的 base64 编码响应。假设我使用的是 jszip 库,你能把 index.html 中的更新代码发给我吗?
-
如果你在服务器上发送一些类似 base64(deflate(JSON.stringify(str))) 的东西,然后在客户端使用 JSON.parse(inflate(atob(data)))...
标签: javascript node.js express socket.io