如何在Socket.io中模拟延迟?

Luk*_*non 1 simulation latency websocket node.js socket.io

目前,我正在localhost连接到我的路由器的设备上测试我的Node.js,Socket.io服务器.

出于测试目的,我想模拟发送消息的延迟,因此我知道它对全世界的用户来说会是什么样的.

有没有有效的方法呢?

jfr*_*d00 6

如果它是您要从服务器发送的要延迟的消息,则可以.emit()使用添加短延迟的连接覆盖每个新连接上的方法.这是在服务器上执行此操作的一种方法:

io.on('connection', function(socket) {
    console.log("socket connected: ", socket.id);

    // override the .emit() method
    (function() {
        var oldEmit = socket.emit;
        socket.emit = function() {
            var args = Array.from(arguments);
            setTimeout(() => {
                oldEmit.apply(this, args);
            }, 1000);
        };
    })();   


    // rest of your connection handler here
 }); 
Run Code Online (Sandbox Code Playgroud)

请注意,有一点需要注意.如果传递对象或数组作为数据socket.emit(),您将看到此代码不会复制该数据,因此在发送数据之前不会实际使用数据(从现在开始1秒).因此,如果执行发送的代码实际上在从现在开始一秒钟之前修改了该数据,那么这可能会产生问题.这可以通过制作传入数据的副本来修复,但我没有在这里添加这种复杂性,因为它并不总是需要,因为它取决于调用者代码的工作方式.