pythonasyncioeventletgeventlong-pollinglow-latencysocket-iosocketiosocketio-serverweb-serverwebsocket
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.0 KiB
48 lines
1.0 KiB
// helper
|
|
function $ (id) { return document.getElementById(id); }
|
|
|
|
// chart
|
|
let smoothie;
|
|
let time;
|
|
|
|
function render () {
|
|
if (smoothie) smoothie.stop();
|
|
$('chart').width = document.body.clientWidth;
|
|
smoothie = new SmoothieChart();
|
|
smoothie.streamTo($('chart'), 1000);
|
|
time = new TimeSeries();
|
|
smoothie.addTimeSeries(time, {
|
|
strokeStyle: 'rgb(255, 0, 0)',
|
|
fillStyle: 'rgba(255, 0, 0, 0.4)',
|
|
lineWidth: 2
|
|
});
|
|
}
|
|
|
|
// socket
|
|
const socket = io();
|
|
let last;
|
|
function send () {
|
|
last = new Date();
|
|
socket.emit('ping_from_client');
|
|
$('transport').innerHTML = socket.io.engine.transport.name;
|
|
}
|
|
|
|
socket.on('connect', () => {
|
|
if ($('chart').getContext) {
|
|
render();
|
|
window.onresize = render;
|
|
}
|
|
send();
|
|
});
|
|
|
|
socket.on('disconnect', () => {
|
|
if (smoothie) smoothie.stop();
|
|
$('transport').innerHTML = '(disconnected)';
|
|
});
|
|
|
|
socket.on('pong_from_server', () => {
|
|
const latency = new Date() - last;
|
|
$('latency').innerHTML = latency + 'ms';
|
|
if (time) time.append(+new Date(), latency);
|
|
setTimeout(send, 100);
|
|
});
|
|
|