目前,我正在 localhost
以及连接到路由器的设备上测试我的 Node.js、Socket.io 服务器。
出于测试目的,我想模拟发送消息的延迟,以便我知道世界各地的用户会遇到什么情况。
有什么有效的方法吗?
最佳答案
如果您想要延迟从服务器发送的消息,则可以使用添加短暂延迟的方法来覆盖每个新连接上的 .emit()
方法。这是在服务器上执行此操作的一种方法:
io.on('connection', function(socket) {
console.log("socket connected: ", socket.id);
// override the .emit() method
const emitFn = socket.emit
socket.emit = (...args) => setTimeout(() => {
emitFn.apply(socket, args)
}, 1000)
// rest of your connection handler here
});
请注意,对此有一个警告。如果您传递一个对象或数组作为 socket.emit()
的数据,您将看到此代码不会复制该数据,因此在数据被复制之前,该数据不会被实际使用。已发送(从现在开始 1 秒)。因此,如果执行发送的代码实际上在一秒后发送数据之前修改了该数据,则可能会产生问题。这可以通过复制传入数据来解决,但我没有在这里添加这种复杂性,因为它并不总是需要的,因为它取决于调用者代码的工作方式。
关于node.js - 如何在 Socket.io 中模拟延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36004917/