Comunicare în timp real

Cum ajung mesajele și notificările instant la utilizator, prin server-ul WebSocket.

Chat-ul live și notificările instant din Recash au nevoie de o conexiune permanent deschisă între client și server. Funcțiile serverless din Next.js nu pot menține o astfel de conexiune, așa că întreaga comunicare live rulează pe un server Node.js separat, cu propriul ciclu de deploy.

Autentificarea conexiunii

Sesiunile de autentificare sunt de tip JWT, deci nu ajung niciodată scrise în baza de date — iar serverul WebSocket nu le poate verifica direct. Soluția este un schimb în doi pași, prin Redis: clientul cere un token de unică folosință de la aplicația Next.js, se conectează la server cu el, iar serverul citește și șterge tokenul într-o singură operație atomică. Un token folosit o dată nu mai poate fi refolosit sau interceptat pentru o a doua conectare.

Livrarea evenimentelor

Aplicația Next.js nu trimite nimic direct clienților. Publică evenimente pe canale Redis — unul per utilizator, unul per postare — iar serverul WebSocket le retrimite exact către conexiunile potrivite. Un utilizator cu mai multe taburi deschise primește evenimentul peste tot, simultan.

Tipurile de evenimente sunt definite o singură dată și folosite identic pe server și pe client:

  • notification:new — notificare nouă
  • post:status_changed — statusul unei postări s-a schimbat
  • chat:message — mesaj nou în conversație
  • post:completed — tranzacția s-a finalizat

Stabilitatea conexiunii

Conexiunile WebSocket se pierd — rețea instabilă, telefonul care intră în repaus. Sistemul este pregătit pentru aceste situații:

  • serverul trimite un ping periodic și închide conexiunile care nu răspund
  • clientul se reconectează automat, cu întârziere progresivă
  • mesajele trimise în timpul reconectării așteaptă într-o coadă și pleacă imediat ce legătura revine