Я хочу реализовать функциональность push-сервера на стороне сервера, используя NodeJS. На данный момент, все, что я хочу, это сервер, который слушает запросы к конкретному URL (например http://localhost:8000/inputData?data=hello
)Наращивание на стороне сервера с помощью NodeJS
После этого запрос был сделан, я хочу, чтобы все клиенты смотровые client.html
запустить alert(hello);
. То, что я сделал, заключается в следующем, на стороне сервера:
var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
parser = new require('xml2json'),
fs = require('fs'),
url = require('url');
var qs = require('querystring');
app.listen(8000);
console.log('server listening on localhost:8000');
function handler(req, res) {
var url_parts = url.parse(req.url, true);
var pathname = url_parts.pathname;
switch(pathname){
case '/inputData':
var data = url_parts.query.data;
socket.emit('notifyData', data); //socket is undefined
break;
default:
fs.readFile(__dirname + '/client.html', function(err, data) {
if (err) {
console.log(err);
res.writeHead(500);
return res.end('Error loading client.html');
}
res.writeHead(200);
res.end(data);
});
}
;
}
На стороне клиента, в client.html
:
<script>
var socket = io.connect('http://localhost:8000');
socket.on('notifyData', function (data) {
alert(data);
});
</script>
Я получаю ошибку о том, что socket
не определен. Я знаю, что я должен определить это раньше, но я не уверен, как это сделать.
Правильно ли это подходит к такой проблеме? или должен быть emit
в другом файле, например. inputData.html
? Я бы скорее дополнил код, который у меня уже есть, потому что мне может потребоваться выполнить ряд операций прямо перед var data= url_parts.query.data
Вы включили [reference] (http://socket.io/download/) в socket.io на своей стороне клиента? '' –
Да, я сделал '' –