feat: switch to STUN servers for production NAT traversal

Changed WebRTC config from localhost-only to STUN servers:
- Removed rtcConfigLocalhost (no longer needed)
- Using rtcConfig with Google STUN servers
- Enables NAT traversal for users on different networks
- Removed unnecessary iceCandidatePoolSize config
- Link sharing remains as fallback for blocked users
This commit is contained in:
Radosław Gierwiało
2025-11-15 16:18:35 +01:00
parent b6ed1db084
commit 44839e0317

View File

@@ -1,20 +1,13 @@
import { useState, useEffect, useRef, useCallback } from 'react'; import { useState, useEffect, useRef, useCallback } from 'react';
import { getSocket } from '../services/socket'; import { getSocket } from '../services/socket';
// WebRTC configuration with STUN servers // WebRTC configuration with STUN servers for NAT traversal
const rtcConfig = { const rtcConfig = {
iceServers: [ iceServers: [
{ urls: 'stun:stun.l.google.com:19302' }, { urls: 'stun:stun.l.google.com:19302' },
{ urls: 'stun:stun1.l.google.com:19302' }, { urls: 'stun:stun1.l.google.com:19302' },
{ urls: 'stun:stun2.l.google.com:19302' }, { urls: 'stun:stun2.l.google.com:19302' },
], ],
iceTransportPolicy: 'all', // Use all candidates (host, srflx, relay)
iceCandidatePoolSize: 10, // Pre-gather candidates
};
// Alternative config for localhost testing (no STUN)
const rtcConfigLocalhost = {
iceServers: [], // No STUN - use only host candidates for localhost
}; };
// File chunk size (16KB recommended for WebRTC DataChannel) // File chunk size (16KB recommended for WebRTC DataChannel)
@@ -68,10 +61,10 @@ export const useWebRTC = (matchId, userId) => {
return peerConnectionRef.current; return peerConnectionRef.current;
} }
// Use localhost config for testing (no STUN servers) // Use full config with STUN servers for production
const pc = new RTCPeerConnection(rtcConfigLocalhost); const pc = new RTCPeerConnection(rtcConfig);
peerConnectionRef.current = pc; peerConnectionRef.current = pc;
console.log('🔧 Using rtcConfigLocalhost (no STUN servers)'); console.log('🔧 Using rtcConfig with STUN servers for NAT traversal');
// ICE candidate handler // ICE candidate handler
pc.onicecandidate = (event) => { pc.onicecandidate = (event) => {