2013-06-14 2 views
1

У меня есть сценарий, в котором у меня есть Node, извлекающий данные с одного сервера через соединение net.socket, а затем с помощью sockets.io для вывода в клиентский браузер. Данные с сервера обновляются каждую минуту или около того. Если я вывожу эти данные на консоль, он отлично работает, показывая обновления по мере их появления. Тем не менее, я не могу заставить эти данные переноситься в браузер через socket.io. Я хорошо разбираюсь в PHP, но новичок в javascript. Однако я понимаю, что по мере обновления данных с сервера он должен запускать «событие», из-за которого socket.io выводит новые данные. Буду признателен за любую помощь.Node.js, не обновляющий клиентскую сторону

//set all variables and modules includes here 
// [...] 

    server = http.createServer (function(req, res) { 
    res.writeHead(200, {'Content-Type:' 'text/html'}); 
    res.end(index); 
    }).listen(8080, localhost); 

    //connection to stats server 
    var socket = new net.Socket(); 
    socket.connect (6000, "xxx.xxx.xxx.xxx", function() { 
    console.log("connected"); 
    }); 
    socket.on('data', function(data) { 
     var buf = new Buffer(data, 'base64'); 
     var calls = buf.toString(); 
     console.log(calls); // if I include this, data outputs to console perfectly 

    //set up socket.io connection to client 
    var clientupdate = function clientupdate() { 
     io.sockets.on('connection', function(socket) { 
     socket.emit('calls', {data: calls}); 
     }); 
    } 
    }); 
+2

где ваш код на стороне клиента? – c0deNinja

+0

Я не так заинтересован в стороне клиента, так как я могу подключиться через socket.io без проблем. Проблема в том, что данные («вызовы»), которые вытаскиваются с сервера, не передаются в socket.io «socket.emit (« вызовы », {данные: вызовы)); нажимать на клиента. Не уверен, что мне не хватает. – Godfried

+0

Godfried

ответ

0

Вы не вызываете функцию clientupdate. Вы заявляете об этом, но не звоните. Все, что вам нужно:

clientupdate(); 
+0

Хорошо в моем ограниченном опыте с JavaScript, что имеет смысл. Должно ли это быть вызвано вместо «console.log (data)»? Часть моей проблемы (среди прочих), я думаю, обволакивает всю асинхронную вещь. – Godfried

0

Есть несколько проблем с кодом:

  1. clientUpdate функция никогда не вызывается, так что сервер не отвечает на новых клиентов на всех.
  2. Даже если вы вызываете функцию, то, как вы ее реализовали, теперь сервер будет отправлять только первый набор данных, полученных после соединения, но не любые последующие результаты. Чтобы исправить это, вы можете отправить сообщение на объект io, это отправит сообщение всем подключенным клиентам.

Комбинированное это будет выглядеть примерно так (непроверенный, но он должен работать):

//set all variables and modules includes here 
// [...] 

    server = http.createServer (function(req, res) { 
    res.writeHead(200, {'Content-Type:' 'text/html'}); 
    res.end(index); 
    }).listen(8080, localhost); 

    //connection to stats server 
    var socket = new net.Socket(); 
    socket.connect (6000, "xxx.xxx.xxx.xxx", function() { 
    console.log("connected"); 
    }); 

    socket.on('data', function(data) { 
    var buf = new Buffer(data, 'base64'); 
    var calls = buf.toString(); 
    console.log(calls); 

    //any data we have we emit to all the clients 
    io.emit('calls', { data : calls }); 
    }); 

Обратите внимание, что поскольку отдельные соединения никогда не используются я пропустил всю io.on('connection') часть. Это необходимо только тогда, когда вам нужно взаимодействовать с отдельными клиентами.

Смежные вопросы