I have a socket server in nodejs, a unity client and I try calculate the latency between them like below
Server:
socket.on("readable", () => {
let data: Buffer = socket.read();
if(data !== null) {
let length: number = parseInt(bufferStream.subarray(0, maxDataLength).toString("hex"), 16);
let dataBuffer : Buffer = bufferStream.subarray(maxDataLength, maxDataLength + length);
let data: string = dataBuffer.toString('utf-8');
let json: any = JSON.parse(data);
switch (json._event.event_name) {
case 'ping':
let pingData = {
event_name : "pong"
}
socket.write((PrepareData(pingData));
break;
}
}
});
Client:
class PingData
{
public static float start = 0;
public static bool pinged = false;
}
private async void SocketReading()
{
if (socket.Available == 0)
{
return;
}
byte[] buf = new byte[socket.Available];
await socket.ReceiveAsync(buf, SocketFlags.None);
buffer.AddRange(buf);
}
private void ProcessBuffer()
{
byte[] lengthField = buffer.Take(4).ToArray();
int dataLength = BitConverter.ToInt32(lengthField, 0);
byte[] dataField = buffer.Skip(4).Take(dataLength).ToArray();
string response = Encoding.UTF8.GetString(dataField);
EventName _event = JsonUtility.FromJson<EventName>(response);
switch (_event.event_name)
{
case "pong":
Debug.Log((Time.time - PingData.start) * 1000f);
PingData.pinged = false;
break;
//other cases
}
}
public void Ping()
{
SendData<PingEvent> data = new SendData<PingEvent>(new PingEvent());
Send(JsonUtility.ToJson(data));
PingData.start = Time.time;
PingData.pinged = true;
}
Is this the correct way to get the ping between server and client? Because the log give very high number (20-100) even when test in same computer.