2014-02-06 2 views
0

У меня есть сценарий Node.js с использованием socket.io. Я понимаю, как это работает, когда сервер отвечает на сообщение клиента. Что я хочу сделать, так это то, что сервер отправляет сообщения самостоятельно, когда выполнение функции завершено. Я не знаю, как действовать, можете ли вы мне помочь?Node.js & Socket.io: отправлять сообщения из пользовательской функции

Вот мой код:

function myfunction(){ 
    // instructions 
    setTimeout(function(){ 
     otherfunction(function(ans){ 
     /* 
      I want to send a message via socket.io over here 
     */ 
     }); 
     myfunction(); 
    }, 30000); 

} 

var server=https.createServer(options, function (req, res) { 
    // instructions 
}.listen(443); 

var io=require('socket.io').listen(server, {log:false}); 
io.sockets.on('connection', function(socket){ 
    socket.on('request', function(msg){ 
      // instructions 
    }); 
}); 

Это будет очень хорошо, если вы можете помочь мне сделать это. Благодарим вас за помощь.

ответ

0

Вы можете сделать это так, если вы хотите, чтобы испустить данные для всех подключенных клиентов:

function myfunction(){ 
setTimeout(function(){ 
    otherfunction(function(ans){ 
    io.sockets.emit('event name', {data: yourData}); 
    }); 
    myfunction(); 
}, 30000); 
} 

Если вы хотите, чтобы испускать отдельных клиентов, то используйте это:

io.sockets.socket(socketid).emit('event name', {data: yourData}); 
+0

Спасибо, это то, что я искал. – user3224275

0

Поскольку nodeJS основан на событии, вы не можете сделать это обычным способом, как в обычном JS. Путь к использованию - это функция обратного вызова, которая выполняется в конце вашей функции.

В основном вы передаете функцию в качестве аргумента, а затем запускаете эту функцию в myFunction.

Смотрите эту скрипку - http://jsfiddle.net/Fizk/NR2c8/

// Declaring myfunction 
function myFunction(arg1, callback){ 
console.log(arg1) 
callback(); 
} 


// Calling myFunction with a callback 
myFunction("This is a message",function(){ 
console.log("This is a callback"); 
}) 
+0

Спасибо за помощь, да, я сделал это, но я не знаю, как это сделать: как я могу nd сообщение с socket.io для хорошего http-клиента из моего блока «io.socket»? – user3224275

+0

О, извините, я неправильно понял ваш вопрос тогда :) Чтобы отправить сообщение, вы должны использовать либо 'socket.broadcast.emit (« запрос »,« это мой запрос »)' , либо 'socket.emit (" request »,« это мой запрос »)' Проверьте этот вопрос, чтобы узнать, в чем разница http://stackoverflow.com/questions/10342681/whats-the-difference-between-io-sockets-emit-and -broadcast –

+0

Да, я знаю разницу, но я хочу поместить мой socket.emit из блока «io.sockets.on ('connection', function (socket) {}). Я попытался поместить мой сокет в глобальную переменную, но emit отправлен в мои два браузера. – user3224275

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