Vấn đề tôi gặp phải là tôi không biết cách có thể biết dữ liệu mà tôi gửi lại máy khách được nén ở định dạng gzip. Nhìn vào đầu ra của máy chủ của tôi từ dòng lệnh tôi thấy:Gửi dữ liệu phản hồi socket.io tới máy khách từ máy chủ node.js ở định dạng gzip
debug - websocket writing 3:::{"result":1368673052397}
debug - websocket writing 3:::{"result":1368673053399}
...
Với tôi, máy chủ này có vẻ như đang viết phản hồi dưới dạng ascii thay vì nén trước khi gửi.
Dưới đây là ví dụ tôi đã viết để tạo ra các kết quả này. Từ những gì tôi đã đọc miễn là tôi đặt 'trình duyệt của khách hàng gzip' các câu trả lời của tôi nên được gửi gzipped. Nếu họ không làm thế nào để tôi làm điều này và nếu tôi làm thế nào tôi có thể nói từ thông tin gỡ lỗi của máy chủ rằng họ đang trong thực tế phản ứng nén.
Khi tôi khởi động máy chủ tôi sử dụng lệnh sau đây trong BASH:
$ NODE_ENV = nút sản xuất 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();
});
bạn chỉ có thể deflate các json và sử dụng một lib như zip.js hoặc jszip để thổi phồng các chuỗi trên khách hàng- kết thúc. – dandavis
@dandavis Tôi đã tải xuống jszip và tôi đã nhận được phần làm lệch trên phía máy chủ bằng cách sử dụng zlib và tôi có thể gửi dữ liệu đã nén đến mã hóa base64 của máy khách nhưng tôi không thể tìm ra cách tăng tốc phản hồi được mã hóa base64 đó khách hàng. Bạn có thể gửi cho tôi mã cập nhật mà tôi cần trong index.html để xử lý điều này giả sử tôi đang sử dụng thư viện jszip không? –
nếu bạn đang gửi một cái gì đó trên máy chủ như base64 (deflate (JSON.stringify (str))), sau đó sử dụng JSON.parse (inflate (atob (dữ liệu))) trên máy khách ... – dandavis