需要使用 Socket io 解析 live json 文件
Posted
技术标签:
【中文标题】需要使用 Socket io 解析 live json 文件【英文标题】:Need to parse live json file using Socket io 【发布时间】:2015-09-04 12:56:06 【问题描述】:首先请注意!我对 node.js 和 socket.io 的世界很陌生 我有一个包含以下数据的 json 文件,例如:-
"football":
"id": 1,
"home": "Liverpool",
"away": "Chelsea",
"score": "1-0",
"last scorer":"Gerrard"
此文件会在几秒钟内实时更新。
我真正想要实现的是解析这个 json 并在客户端将其更新为 html,此外我还想监听 json 文件中的任何更改并将其再次更新到 html 客户端。我怎样才能做到这一点,对不起,如果这个问题看起来很愚蠢,但任何建议都会有所帮助。
【问题讨论】:
为什么投反对票,至少给出理由??? 我的猜测是它被否决了,因为你问了一个问题“我该怎么做?”而不是“我试过了,但它不起作用;为什么它不起作用,我该如何解决?” 【参考方案1】:我终于找到了一些东西,经过一些调整和研究其他答案,我终于制作了一个工作代码 首先简要回顾一下这段代码的作用 观看您的 json 文件(在本例中为 sports.json) 如果检测到更改,则仅读取 json 文件(在本例中为 sports.json) 然后将读取的 json 文件发送到连接的客户端
在客户端,只要您对 json 文件进行更改,魔法就会开始
PS:关于手动编辑和保存时 fs.watch 触发两次的讨论(我将尽快提出解决方法并在此处更新)
服务器端
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var jf = require('jsonfile'); //jsonfile module
var fs = require('fs'); //require file system
app.get('/', function(req, res)
res.sendFile(__dirname + '/index.html');
);
io.sockets.on('connection', function(socket)
fs.watch("sports.json", function(event, fileName) //watching my sports.json file for any changes
//NOTE: fs.watch returns event twice on detecting change due to reason that editors fire 2 events --- there are workarounds for this on ***
jf.readFile('sports.json', function(err, data) //if change detected read the sports.json
var data = data; //store in a var
console.log('sent') //just for debugging
socket.volatile.emit('notification', data); //emit to all clients
);
);
);
http.listen(3000, function() //listen to 3000
console.log('listening on *:3000');
);
客户端:
<!doctype html>
<html>
<head>
<title>Socket.IO data</title>
<body>
<p id ="data">A data will appear here on change</p>
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io.connect('http://localhost:3000'); //you can replace localhost with your public domain name too!!
socket.on('notification', function (data)
$('#data').text(data.football.home); //Liverpool
);
</script>
</body>
sports.json 文件
"football":
"id": 1,
"home": "Liverpool",
"away": "Chelsea",
"score": "1-0",
"last scorer":"Gerrard"
【讨论】:
因为您对 SO 似乎很陌生:如果一个答案对您有帮助,即使它不是您自己的问题(我认为这与您所说的其他答案相关),这对您很有帮助支持该答案,以便用户知道它很有帮助。【参考方案2】:(抱歉,我的回答不够详细,我遇到了电脑问题,很难做很多事情;解决问题后我会对其进行编辑,一切都不会崩溃)
要查找文件中的更改,请尝试以下操作:Monitor file change through AJAX, how? 或 Check if file has changed using HTML5 File API
服务器文件:
var EventEmitter = require('events').EventEmitter;
var footballWatcher = new EventEmitter();
io.on('connection', function (client)
//
//Existing Code
//
//Node.js Event listener:
footballWatcher.on('update', function()
io.emit('footballUpdate', footballData);
);
//Code to look for a change in the file, use this in it:
if(updated)
footballWatcher.emit('update');
);
客户端文件:
//
//Existing Code (connections, methods, emits and responses, etc.)
//
socket.on('football', function(footballJSONData)
//JSON interpretation
);
【讨论】:
我假设您在使用 node.js 和 socket.io 部分时遇到了问题,正如您所说的那样,您是他们的新手,所以我会尝试在这些方面为您提供更多帮助. 我注意到你的文件监视想法并实现了我在其他地方找到的东西,谢谢你的帮助!!! 没问题,我希望一切顺利。如果其中一个人解决了您的问题,请务必选择您的问题的答案,以免其他人尝试解决已经解决的问题。以上是关于需要使用 Socket io 解析 live json 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Socket.IO + Node.js + ZMQ 发送消息时发生内存泄漏
通过io.sockets.sockets解析时如何获取socket id