My setup is a multiplayer game, with sockets to async transfer data.
Now because of the nature of a game, I have a game loop which should tick every 500ms to do player updating (e.g. position, appearance,...).
var self = this;
this.gameLoop = setInterval(function()
{   
    for (var i = 0; i < playerSize; i++)
    {
        self.players.get(i).update();
    };
}, 500);
I'm currently using setInterval but when i did some benchmarks with about 200 connections, setInterval drifted away to 1000ms instead of 500ms, which makes the whole game appear laggy. Also it's not accurate enough unfortunately with a little amount of players. (note that the update calls only take about 100ms maximum)
So to me after researching, there seems to be no other option then to spawn a process which only handles the timining mechanism? Or are there other options?
Anyone has done this before or can give some fundamental ideas/solutions on how to do this?
Full code:
Game.prototype.start = function()
{
    var average = 0;
    var cycles = 10;
    var prev = Date.now();
    this.thread = setInterval(function()
    {       
        console.log("interval time="+(Date.now() - prev));
        prev = Date.now();
        var s = Date.now();
        // EXECUTE UPDATES
    for (var i = 0; i < playerSize; i++)
    {
        self.players.get(i).update();
    };
        average += (Date.now() - s);
        cycles--;
        if(cycles == 0)
        {
            console.log("average update time: " + (average/10) + "ms");
            average = 0;
                cycles = 10;
            }
    }, 500);
}
 
     
    