♻️(frontend) refactor connection warmup to use LiveKit methods

Replace custom connection warmup implementation with LiveKit's built-in
methods for better reliability and consistency.
This commit is contained in:
lebaudantoine
2025-07-24 14:49:49 +02:00
parent 387bc2e1f4
commit 66a36eff73

View File

@@ -57,36 +57,6 @@ export const Conference = ({
},
})
/**
* Warm up connection to LiveKit server before joining room
* This prefetch helps reduce initial connection latency by establishing
* an early HTTP connection to the WebRTC signaling server
*
* FIREFOX + PROXY WORKAROUND:
* On Firefox behind proxy configurations, WebSocket signaling fails to establish.
* Client receives HTTP 200 instead of expected 101 (Switching Protocols).
* This appears to be a certificate/security issue where the initial request
* is considered unsecure. By first calling the signaling server via HTTPS,
* subsequent WebSocket establishment works correctly in these setups.
* This is a temporary workaround - issue is reproducible on LiveKit's demo app.
*/
useEffect(() => {
const warmUpLivekitConnection = async () => {
if (isConnectionWarmedUp || !apiConfig) return
try {
// Make HTTPS request to establish secure connection
// This resolves Firefox+proxy WebSocket handshake issues
await fetch(apiConfig.livekit.url)
setIsConnectionWarmedUp(true)
} catch (error) {
// Don't block room connection if warmup fails
console.warn('LiveKit connection warmup failed:', error)
setIsConnectionWarmedUp(true)
}
}
warmUpLivekitConnection()
}, [isConnectionWarmedUp, apiConfig])
const {
status: fetchStatus,
isError: isFetchError,
@@ -127,6 +97,28 @@ export const Conference = ({
const room = useMemo(() => new Room(roomOptions), [roomOptions])
useEffect(() => {
/**
* Warm up connection to LiveKit server before joining room
* This prefetch helps reduce initial connection latency by establishing
* an early HTTP connection to the WebRTC signaling server
*
* FIREFOX + PROXY WORKAROUND:
* On Firefox behind proxy configurations, WebSocket signaling fails to establish.
* Client receives HTTP 200 instead of expected 101 (Switching Protocols).
* This appears to be a certificate/security issue where the initial request
* is considered unsecure. By first calling the signaling server via HTTPS,
* subsequent WebSocket establishment works correctly in these setups.
* This is a workaround - issue is reproducible on LiveKit's demo app.
*/
const prepareConnection = async () => {
if (!apiConfig || isConnectionWarmedUp) return
await room.prepareConnection(apiConfig.livekit.url)
setIsConnectionWarmedUp(true)
}
prepareConnection()
}, [room, apiConfig, isConnectionWarmedUp])
const [showInviteDialog, setShowInviteDialog] = useState(mode === 'create')
const [mediaDeviceError, setMediaDeviceError] = useState<{
error: MediaDeviceFailure | null