javascript - Nodejs环回TCP延迟1-2ms?
问题描述
在 NodeJS 中创建通过环回地址连接的 TCP 服务器/客户端时,对于简单的低数据消息,我得到 1-2 毫秒的往返时间。
我没有太多关于 Node 应该有多快的上下文,但它似乎应该小于 1ms,因为没有太多的操作正在进行,并且环回 ping 时间以微秒为单位。
我缺少的网络包中是否有一些缓冲,或者这种延迟是可以预期的?
服务器:
var net = require('net');
var server = net.createServer((socket) => {
socket.setNoDelay();
setInterval(()=>{
socket.write(process.hrtime.bigint().toString());
}, 1000)
socket.on('data', (data)=>{
console.log("Completed in: " + parseFloat((process.hrtime.bigint() - BigInt(data))/BigInt(1e3))/1000 + "ms")
})
});
server.listen(1337, '127.0.0.1');
客户:
var net = require('net');
var client = new net.Socket();
client.connect(1337, '127.0.0.1', () => {
console.log('Connected');
});
client.on('data', (data) => {
client.write(data.toString());
});
client.on('close', () => {
console.log('Connection closed');
});
解决方案
这是预期的行为。我确信有优化解释器的方法,但是如果您的用例需要实时响应时间(<1ms),也许您应该将您的技术堆栈更改为可以更有效地使用 cpu、多线程、io 等的其他语言。
推荐阅读
- c# - 在 C# 中声明一个 KeyValuePair 元组
- marklogic - mlloaddatabases backup-enabled 始终为 true
- firebase - 有没有办法使用 Firebase 收集用户电子邮件?
- hyperledger-fabric - getStateByPartialCompositeKey 正在重新调整不可迭代的对象
- php - Laravel 隐式模型绑定命名约定?
- r - 以编程方式在 data.table 中使用 by 对列进行操作
- c# - Foreach 循环中的 Async/Await(即循环 ef 模型)生成错误
- reactjs - 使用 withTracker 的客户端加入不等待服务器的回复
- php - 仅返回购物车 Woocommerce 中的商品数量
- ruby - 为什么 reduce([]) 在尝试向其推送值时引发 NoMethodError?