Javascript Nodejs和socket.io发送json更改
我已经成功地使用nodejs和socket.io将一个大型json文件从服务器发送到客户机,但我在下一步遇到了难题:我需要分析json,只向客户机发送更改,这样我就可以在客户机端快速实时更新,而不必每秒发送整个json。我担心我错过了一些基本的东西。它目前正在一次又一次地发送整个json。我看到了发生的地方,我只是不知道如何发送,而是只看到更改。想法 服务器:Javascript Nodejs和socket.io发送json更改,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我已经成功地使用nodejs和socket.io将一个大型json文件从服务器发送到客户机,但我在下一步遇到了难题:我需要分析json,只向客户机发送更改,这样我就可以在客户机端快速实时更新,而不必每秒发送整个json。我担心我错过了一些基本的东西。它目前正在一次又一次地发送整个json。我看到了发生的地方,我只是不知道如何发送,而是只看到更改。想法 服务器: /*************************** Require modules *********************
/*************************** Require modules ********************************/
var app = require('express')()
, request = require('request')
, fs = require('fs')
, http = require('http')
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
/************************* Start socket server ******************************/
server.listen(8127);
// socket.io
io.sockets.on('connection', function(socket){
var options = {
host: 'host.com',
port: 80,
path: '/api/tomyjson.json',
headers: {
'Authorization': 'Basic ' + new Buffer('username' + ':' + 'password').toString('base64')
}
};
function getStreams() {
http.get(options, function(response){
var data = "";
response.on('data', function(chunk) {
data += chunk;
});
response.on('end', function() {
socket.emit('news', JSON.parse(data));
});
});
}
setInterval(getStreams, 5000);
socket.on('message', function(data){
console.log(data)
})
socket.on('disconnect', function(){
})
});
var socket = io.connect('host.com:8127/');
socket.on('news', function (json) {
$.each(json.data, function(i, x) {
console.log(x.json.element);
$('#stream-container').prepend(x.json.element);
})
socket.emit('my other event', { my: 'data' });
});
socket.on('message', function(data){
// Do some stuff when you get a message
oldData += data;
document.getElementById('stream-container').innerHTML = oldData;
});
socket.on('disconnect', function(){
// Do some stuff when disconnected
});
客户端JS:
/*************************** Require modules ********************************/
var app = require('express')()
, request = require('request')
, fs = require('fs')
, http = require('http')
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
/************************* Start socket server ******************************/
server.listen(8127);
// socket.io
io.sockets.on('connection', function(socket){
var options = {
host: 'host.com',
port: 80,
path: '/api/tomyjson.json',
headers: {
'Authorization': 'Basic ' + new Buffer('username' + ':' + 'password').toString('base64')
}
};
function getStreams() {
http.get(options, function(response){
var data = "";
response.on('data', function(chunk) {
data += chunk;
});
response.on('end', function() {
socket.emit('news', JSON.parse(data));
});
});
}
setInterval(getStreams, 5000);
socket.on('message', function(data){
console.log(data)
})
socket.on('disconnect', function(){
})
});
var socket = io.connect('host.com:8127/');
socket.on('news', function (json) {
$.each(json.data, function(i, x) {
console.log(x.json.element);
$('#stream-container').prepend(x.json.element);
})
socket.emit('my other event', { my: 'data' });
});
socket.on('message', function(data){
// Do some stuff when you get a message
oldData += data;
document.getElementById('stream-container').innerHTML = oldData;
});
socket.on('disconnect', function(){
// Do some stuff when disconnected
});
您可以控制JSON文件的更新方式吗?不,我可以直接读取它。但我知道它是如何更新的,也就是说,新的(更改的)行(我需要的行)被添加到文件的开头。你可以计算行数,只发出新行。因此,保留初始计数,然后在每次获取后,查看行计数是否已更改。