Node.js& Socket.io:从自定义函数发送消息

时间:2014-02-06 14:24:58

标签: javascript node.js socket.io

我有使用socket.io的Node.js脚本。我理解当服务器应答客户端消息时它是如何工作的。 我想要做的是,当一个函数的执行结束时,服务器自己发送消息。我不知道怎么办,你能帮助我吗?

这是我的代码:

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
     });
});

如果你可以帮我这样做,那将是非常好的。 谢谢你的帮助。

2 个答案:

答案 0 :(得分: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");
})

答案 1 :(得分: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});