Online Sınav Güvenliği: WebRTC ve WebSocket ile Gerçek Zamanlı Sistemler
Production ortamında güvenli online sınav platformları geliştirirken kopya tespiti, kullanıcı takibi ve gerçek zamanlı iletişim için WebRTC ve WebSocket mimarisini nasıl kurguladım.
- WebRTC
- WebSocket
- Laravel
- React
- Online Exam
Production ortamında binlerce öğrencinin aynı anda sınava girdiği bir sistem düşünün. Kamera açık, ekran paylaşımı aktif, gözetmen panelinden anlık müdahale edilebiliyor ve arka planda kopya tespiti çalışıyor. Bu senaryo teoride kolay görünür; pratikte ise frontend, backend, gerçek zamanlı iletişim ve güvenlik katmanlarının birlikte ölçeklenebilir şekilde tasarlanmasını gerektirir.
KCTEK bünyesinde Qulak platformu üzerinde tam da bu problem alanında çalıştım. Dijital eğitim ve güvenli online sınav sistemlerinde uçtan uca geliştirme sorumluluğu aldım. Bu yazıda, sahada öğrendiğim mimari kararları ve teknik yaklaşımları paylaşıyorum.
Neden Gerçek Zamanlı Mimari Şart?
Klasik HTTP istek-yanıt modeli, online sınav ortamında yetersiz kalır. Gözetmenin adayı anlık görmesi, ihlal bildirimlerinin gecikmeden iletilmesi ve sınav akışının kesintisiz sürmesi için sürekli açık bir kanala ihtiyaç vardır.
Bu noktada iki teknoloji öne çıkar:
- WebSocket: Durum güncellemeleri, bildirimler, chat ve sınav oturumu senkronizasyonu
- WebRTC: Düşük gecikmeli video, ses ve ekran paylaşımı
React tabanlı frontend ile Laravel backend arasında bu iki katmanı birleştirmek, sistemin hem kullanıcı deneyimini hem de güvenilirliğini doğrudan etkiler.
Kopya Tespiti ve Kullanıcı Aktivite Takibi
Sınav güvenliği yalnızca kamera açmakla bitmez. Aşağıdaki sinyalleri birlikte değerlendirmek gerekir:
- Sekme değişimi ve odak kaybı
- Kopyala-yapıştır davranışları
- Anormal fare ve klavye aktivitesi
- Kamera veya mikrofonun kapanması
- Ağ bağlantısı dalgalanmaları
Frontend tarafında bu olayları yakalayıp backend'e anlamlı event'ler olarak göndermek kritik. Ham veriyi değil, bağlamlı veriyi iletmek raporlama ve müdahale süreçlerini kolaylaştırır.
Backend tarafında Laravel servisleri bu event'leri işleyerek risk skoru üretir. Gözetmen paneli WebSocket üzerinden güncellenir ve kritik durumlarda anlık uyarı gösterilir.
WebRTC Entegrasyonunda Dikkat Edilmesi Gerekenler
WebRTC güçlü ama hassas bir teknoloji. Production'da şu noktalara özellikle dikkat ettim:
- STUN/TURN yapılandırması: Kurumsal ağlarda P2P bağlantı her zaman mümkün olmaz.
- Bant genişliği yönetimi: Video kalitesini cihaz ve bağlantıya göre dinamik ayarlamak gerekir.
- Yeniden bağlanma stratejisi: Bağlantı koptuğunda kullanıcıyı sınavdan atmak yerine kontrollü recovery akışı sunmak önemli.
- Tarayıcı uyumluluğu: Chrome, Safari ve Firefox arasında davranış farklarını test etmek şart.
CommuneNow ve Live P2P gibi projelerde de benzer gerçek zamanlı iletişim problemleriyle çalıştım. Online sınav ortamında bu deneyim, edge case'leri önceden görmemi sağladı.
Frontend ve Backend Arası Veri Akışı
En büyük teknik borç kaynaklarından biri, frontend ile backend arasındaki tutarsız veri modelleridir. Qulak'ta şu prensipleri uyguladık:
- API response'ları için net tip tanımları (TypeScript)
- Sınav oturumu state'ini tek kaynakta yönetme
- WebSocket event'leri için versiyonlu payload yapısı
- Hata durumlarında kullanıcıya anlaşılır geri bildirim
Bu yaklaşım, yeni modül eklerken regresyon riskini ciddi şekilde azalttı.
Ölçeklenebilirlik ve Production Deneyimi
Sınav dönemlerinde trafik patlamaları normaldir. Auto Scaling, veritabanı okuma/yazma ayrımı ve cache stratejileri bu dönemlerde kritik hale gelir. PostgreSQL ve MySQL'i birlikte kullandığımız senaryolarda, hangi verinin nerede tutulacağına baştan karar vermek performansı doğrudan etkiler.
Sonuç
Online sınav güvenliği, tek bir özellik değil; mimari bir yaklaşımdır. WebRTC ve WebSocket doğru kurgulandığında hem güvenli hem de kullanıcı dostu bir deneyim mümkün olur. Production'da çalışan sistemlerde geliştirme yapmak, teorik çözümlerden çok daha değerli dersler verir.
Bu alanda deneyim kazanmak isteyen geliştiricilere tavsiyem: önce basit bir WebSocket chat yapın, ardından WebRTC ile video ekleyin, en son güvenlik ve ölçek senaryolarını düşünün. Katman katman ilerlemek, karmaşık sistemleri yönetilebilir kılar.