¿Hay alguna manera de saber que SharedWorker está a punto de cerrarse, algo así como el evento beforeunload que tiene esa window ?
Necesito esta información dentro del trabajador para señalar al servidor el cierre del socket web, etc.
No.
Pero SharedWorker estará activo siempre que haya una página activa que contenga una referencia a él (a través new SharedWorker() ). Entonces, lo que puede hacer es publicar un mensaje en su SharedWorker cuando su página esté a punto de desaparecer (evento de pagehide de página), y su SharedWorker puede realizar un seguimiento de cuántas páginas están vivas y cerrar el WebSocket cuando el conteo en vivo cae a cero.
Sin embargo, tenga cuidado con la definición de "página en vivo". Chrome (y también otros navegadores) se esfuerza por optimizar el rendimiento del navegador y el impacto energético. Chrome tiene esta función de descarte de pestañas en la que descartará las páginas de fondo cuando haya presión en la memoria. Descartar una página eliminará los datos de la página sin cerrar la ventana, de modo que cuando el usuario vuelva a hacer clic en las ventanas, Chrome pueda volver a cargar la página. Por lo general, esto no es un problema para un sitio web simple, pero dado que está ejecutando websocket dentro de SharedWorker, esto podría tener algunas implicaciones en el diseño general de su protocolo. En particular, si se descartan todas sus páginas, su SharedWorker también muere. Y descartar una página tiene absolutamente cero notificaciones.