Luk*_*non 1 simulation latency websocket node.js socket.io
目前,我正在localhost
连接到我的路由器的设备上测试我的Node.js,Socket.io服务器.
出于测试目的,我想模拟发送消息的延迟,因此我知道它对全世界的用户来说会是什么样的.
有没有有效的方法呢?
如果它是您要从服务器发送的要延迟的消息,则可以.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秒).因此,如果执行发送的代码实际上在从现在开始一秒钟之前修改了该数据,那么这可能会产生问题.这可以通过制作传入数据的副本来修复,但我没有在这里添加这种复杂性,因为它并不总是需要,因为它取决于调用者代码的工作方式.