pequeña pregunta. ¿Cómo puedo calcular el ping de una conexión WebSocket? El servidor está configurado usando Node.js y node-websocket-server, si eso es realmente importante.Calculando el Ping de una conexión WebSocket?
Respuesta
Para calcular la latencia, realmente debe completar el viaje de ida y vuelta. Debería tener un mensaje de ping que tenga una marca de tiempo. Cuando un lado u otro recibe un ping, debe cambiarlo a un pong (o gnip o lo que sea), pero conserve la marca de tiempo original y envíela al remitente. Luego, el remitente original puede comparar la marca de tiempo con la hora actual para ver cuál es la latencia de ida y vuelta. Si necesita una latencia unidireccional, divida por 2. La razón por la que necesita hacerlo de esta manera es que, sin algunos algoritmos de desviación de tiempo muy sofisticados, el tiempo en un host frente a otro no será comparable en pequeños deltas de tiempo como este.
Puede enviar una solicitud a través del zócalo web con Date.now()
como datos y compararla con Date.now()
en el servidor.
Esto le proporciona la diferencia de tiempo entre el envío del paquete y su recepción, más cualquier tiempo de manipulación en cualquier extremo.
¿Hay alguna forma eficiente de hacerlo para que se actualice automáticamente? – Alexander
@Alexander sondeo continuo o adjuntar marcas de tiempo a cada solicitud de socket web. ¿Necesita la latencia para cualquier cosa que no sea información? Solo se debe usar para iniciar sesión, no para cambiar la forma en que funciona su aplicación. – Raynos
Es solo para iniciar sesión, para ver cómo varían las variaciones entre la latencia que tienen los clientes conectados y para mostrarla en la página. – Alexander
Websockets tienen un mensaje de tipo ping al que el servidor puede responder con un mensaje de tipo pong. Consulte this para obtener más información sobre websockets.
Hay algunas maneras. Uno que es ofrecido por Raynos - está mal. Porque el tiempo del cliente y el tiempo del servidor son diferentes y no puede compararlos.
La solución con fecha y hora de envío es buena, pero tiene un problema. Si la lógica del servidor toma algunas decisiones y cálculos basados en el ping, entonces el envío de la marca de tiempo, implica el riesgo de que el software del cliente o MITM modifique la marca de tiempo, de esa manera dará otros resultados al servidor.
Mucho mejor, es enviar paquetes al cliente con ID único, que no es un número de incremento, sino aleatorio. Y luego el servidor esperará del mensaje "PONG" del cliente con esta ID. El tamaño de la ID debe ser el mismo, recomiendo 32bits (int). De esa forma el servidor envía "PING" con identificación única y marca de tiempo de la tienda del mensaje enviado, y luego espera hasta que reciba la respuesta "PONG" con la misma ID del cliente, y calculará la latencia de ida y vuelta según la marca de tiempo almacenada y nuevo en el momento de recibir el mensaje PONG. No se olvide de implementar el caso con el tiempo de espera, para evitar que el paquete perdido PING/PONG detenga el proceso de comprobación de la latencia.
Además WebSockets tiene un código de operación de paquete especial llamado PING, pero el ejemplo de la publicación anterior no usa esta característica. Lea este documento oficial que describe este código de operación específico, podría ser útil si está implementando su propio protocolo WebSockets en el servidor: http://tools.ietf.org/html/rfc6455#page-37
¿Por qué downvote, algún comentario al respecto? – moka
- 1. Envío de WebSocket marco de ping/pong desde el navegador
- 2. Calculando velocidad de conexión/descarga
- 3. configuración de conexión Websocket
- 4. conexión entre dominios de WebSocket causando una NS_ERROR_DOM_SECURITY_ERR
- 5. Cómo configurar WebSocket Conexión segura con PHP?
- 6. es posible enviar datos cuando se abre una conexión websocket
- 7. ¿Cómo puedo obtener el ID de sesión (Express) para una conexión websocket?
- 8. WebSocket conexión interrumpida cuando Apache HTTPD delante de Tomcat
- 9. ¿Es una mala práctica enviar HTML a través de una conexión WebSocket
- 10. WebSocket
- 11. Calculando el inverso de una matriz muy grande
- 12. Calculando el valor de opacidad matemáticamente
- 13. Establecimiento de conexión TCP = ¿Cómo medir el tiempo basado en Ping RRT?
- 14. Costo de websocket seguro vs. websocket no seguro
- 15. Calculando una media móvil en F #
- 16. Cómo obtener una medida de ping precisa
- 17. calculando la altura de UITabBar
- 18. ¿Puedo abrir una conexión websocket a un servidor local que se ejecuta en un puerto arbitrario?
- 19. Calculando SimRank usando NetworkX?
- 20. Java websocket host?
- 21. Cliente Websocket en C++
- 22. WebSocket Traffic Encoding (GZip)
- 23. Erlang calculando el ejemplo HMAC-SHA1?
- 24. ¿Cómo hacer ping en JavaScript o jQuery?
- 25. Alojando una aplicación de tornado/websocket
- 26. HAProxy + WebSocket Desconexión
- 27. Uso de WebSocket en el servidor Apache
- 28. Múltiples conexiones de websocket
- 29. Compresión de datos WebSocket
- 30. Cerrando WebSocket correctamente (HTML5, Javascript)
¿Qué se entiende por "calcular el ping"? –
Para calcular la latencia que tiene la conexión. – Alexander