Я играл с NodeJS & socket.io, чтобы реализовать push api & filewatcher.Подключение Node.JS и Socket.IO внешних
Я смотрел на этот пример: http://www.gianlucaguarini.com/blog/nodejs-and-a-simple-push-notification-server/
Я получил сервер и работает, и когда меняется XML сервер будет толкать уведомления. Я вижу только изменение данных, если я иду на localhost: 8000. Если я просто открою файл node.html, он останется пустым и даст ошибку (в отладке), что socket.io не может быть найден (404).
Что я делаю неправильно или мне нужно добавить код?
Это код (server.js):
var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
parser = new require('xml2json'),
fs = require('fs');
// creating the server (localhost:8000)
app.listen(8000);
// on server started we can load our client.html page
function handler(req, res) {
fs.readFile(__dirname + '/node.html', function(err, data) {
if (err) {
console.log(err);
res.writeHead(500);
return res.end('Error loading node.html');
}
res.writeHead(200);
res.end(data);
});
}
// File watcher
io.sockets.on('connection', function(socket) {
console.log(__dirname);
// watching the xml file
fs.watch(__dirname + '/cache/file.xml', function(curr, prev) {
// on file change we can read the new xml
fs.readFile(__dirname + '/cache/file.xml', function(err, data) {
if (err) throw err;
// parsing the new xml data and converting them into json file
var json = parser.toJson(data);
// adding the time of the last update
json.time = new Date();
// send the new data to the client
socket.volatile.emit('file', json);
});
});
});
node.html
<html>
<head>
<!--
* Author: Gianluca Guarini
* Contact: [email protected]
* Website: http://www.gianlucaguarini.com/
* Twitter: @gianlucaguarini
-->
<title>Push notification server</title>
</head>
<body>
<div id="file"></div>
<script src="socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script>
// creating a new websocket
var socket = io.connect('192.168.1.11:8000/');
// on every message recived we print the new datas inside the #container div
socket.on('file', function (data) {
// convert the json string into a valid javascript object
var data = JSON.parse(data);
$('#file').html(data);
});
</script>
</body>
</html>