延迟是socket.io事件?

时间:2016-07-02 00:24:21

标签: javascript node.js socket.io

我创建了对IMBd数据库的ajax调用

// API Key
key = "4dba72b2-7558-4c0f-bd18-9ffcb0999c4e";
// Url
mainUrl = "http://api.myapifilms.com/imdb/top?token="+ key +"&format=json&data=0&start=1&end=250";
// API Call
var request = require('request');

request(mainUrl, function (error, response, body) {
    if (!error && response.statusCode == 200) {

    // Storing data in an object
    var obj         = JSON.parse(body), //JSON Parser
        movieArray  = obj.data.movies, //Creating Array
        item        = movieArray[randomMovieRank]; //Setting random movie variable
        itermArray  = [item.ranking,item.title,item.year];

    console.log(itermArray);
    io.sockets.emit("serverAnswer", {ranking: itermArray[0], title: itermArray[1], year: itermArray});

  }
});

return false;

跟进:

socket.on("serverAnswer", function(data){
    console.log(data.title);
});

在客户端调用socket.on。我遇到的问题是,如果有的话,它会非常缓慢地提取数据。 API正在工作,因为它是终端中正确的控制台日志记录。但客户方面有时会通过广告来解决问题。有什么我做错了吗?

编辑:

添加了pastebin:http://pastebin.com/TYHsqBmK

1 个答案:

答案 0 :(得分:1)

当您调用 emit 方法时,您的客户端无法保证连接,您可以在客户端连接或发出指定消息后触发ajax事件,例如

服务器

io.on('connection',function(socket){
    if(movies !== null)
    {
        socket.emit("serverAnswer", {movies:movies});
    }
    else{
        //1.ajax request IMDB resource
        //2.set movies variables
        //3.emit message
    }
});

客户:

socket.on("serverAnswer", function(data){
        console.log(data);
    });