【发布时间】:2021-09-24 20:51:18
【问题描述】:
我目前正在开发一个 UDP pinger,客户端应该发送一条消息 (Ping) 并接收 pong 10 次。但是,消息同时发送 10 次,其想法是让服务器在收到 ping 后将 pong 发回,而不是让终端一次发送所有内容。
这是由于我知道的 server.send 周围的 for 循环。我只是不确定如何让服务器在收到消息后才发回回复,从而使服务器为每条消息记录不同的时间。我希望我的问题有意义。到目前为止,我想出了这个:
var host = "127.0.0.1", port = 33333;
var dgram = require( "dgram" );
var buffer = require('buffer');
var server = dgram.createSocket( "udp4" );
var date1 = new Date()
var today = Buffer.from(date1)
server.on('listening', () => {
const address = server.address();
console.log(`server listening on port ` + 4000 + ' and address 127.0.0.1');
});
server.on( "message", function( msg, rinfo ) {
for (let message = 0; message < 10; message++){
const message = 'Ping'
server.send( message, 0, msg.length, rinfo.port, rinfo.address, date1 );
console.log( rinfo.address + ':' + rinfo.port + ' - ' + msg + ' . ' + date1 );
}});
server.on('error', (err) => {
console.log(`server error:\n${err.stack}`);
server.close();
});
server.on("close", function(){
console.log("\n Client is offline")
})
server.bind( port, host );
客户端:
var host = "127.0.0.1", port = 33334;
var dgram = require( "dgram" );
var buffer = require('buffer');
var client = dgram.createSocket( "udp4" );
var date1 = new Date()
var today = Buffer.from(date1)
console.log(date1)
client.on('listening', () => {
const address = client.address();
console.log(`client listening on port ` + 4000 + ' and address 127.0.0.1');
});
client.on( "message", function( msg, rinfo ) {
console.log( rinfo.address + ':' + rinfo.port + ' - ' + msg + ' - ' + date1 );
});
client.on('error', (err) => {
console.log(`server error:\n${err.stack}`);
server.close();
});
client.on("close", function(){
console.log("\n Client is offline")
})
client.bind( port, host ); //client listens to a port
var message = "Pong!"
client.send(message, 0, message.length, 33333, "127.0.0.1", date1 );
到目前为止,代码还打印出每条消息的发送时间(我得到的所有发送消息的时间都是相同的)。在发送 10 次乒乓球和乒乓球后,我如何将往返时间纳入其中的任何想法都会令人惊叹。
非常感谢!
【问题讨论】:
-
所以你想 ping 10 次,每次得到一个 pong?从您的措辞看来,您希望每次 ping 打 10 次乒乓球
-
@Rojo 我有点不确定如何提出我的问题,但是是的,你理解正确。
-
所以您只想将每个用户的 ping 次数限制为 10?还是 10 次乒乓球时会发生什么特别的事情?
-
@Rojo 每个用户应该达到 10 次 ping,其中消息之间的延迟基本上是用往返时间计算的。换句话说,计算 ping。目前它只是一次打印所有内容,消息之间没有时间差
-
@Rojo 我还必须补充一点,它应该在 10 次乒乓球结束时计算发送的消息之间的延迟。但我还没有实现,因为我仍然不确定如何做到这一点。
标签: javascript node.js udp