36 điểm bởi xguru 2025-10-27 | 8 bình luận | Chia sẻ qua WhatsApp
  • Thư viện giúp hiện thực web app multiplayer được kết nối với nhau mà không cần máy chủ chỉ với vài dòng code
  • Dựa trên WebRTC của trình duyệt, tận dụng mạng công khai làm kênh trao đổi tín hiệu (signaling) để tự động hóa việc ghép nối P2P và giao tiếp
    • Chọn một trong BitTorrent, Nostr, MQTT, IPFS, Supabase, Firebase để phát hiện peer mà không cần máy chủ
    • Dữ liệu ứng dụng sau signaling được truyền trực tiếp bằng P2P + mã hóa E2E mà không đi qua bên trung gian
  • Cung cấp các trừu tượng hóa cấp cao như Rooms/broadcasting, tự động serialization, chunking/throttling cho dữ liệu lớn, sự kiện tiến trình, mã hóa dữ liệu phiên, metadata của stream
  • Chạy không chỉ trên trình duyệt mà còn trong Node/Deno/Bun, đồng thời hỗ trợ các tính năng thực chiến như cấu hình máy chủ TURN, React hooks, thực thi phía máy chủ
  • Cách tiếp cận tận dụng hạ tầng công khai theo kiểu không cần cấu hình khiến nó rất phù hợp cho nhiều thử nghiệm và hoạt động tạo prototype

8 bình luận

 
kimjoin2 2025-10-27

Máy chủ TURN có phải tổ tiên lo sẵn cho không?

 
helio 2025-10-28

'stun:stun.cloudflare.com:3478' có vẻ đang được hardcode trong mã nguồn.

 
kimjoin2 2025-10-28

Không phải stun mà là turn.
stun chỉ ở mức đơn giản là cho biết bạn là ai theo tiêu chuẩn stun, nên cũng có kha khá server công khai,
còn turn thì phải relay lưu lượng nên (đắt) либо là trả tiền để dùng, либо là phải tự triển khai.
Ví dụ) https://github.com/coturn/coturn
Là kiểu như vậy đó.

Dù cũng có nhiều trường hợp chỉ với stun là vẫn có thể giao tiếp được, nhưng để nói đơn giản là “được” thì.....
kiểu là...... cũng chạy đấy..... nhưng mà ừm.. là cảm giác vậy.

 
skageektp 2025-10-29

Nếu là ghép nối p2p thì đâu cần TURN nhỉ?

 
kimjoin2 2025-10-29

Có lẽ còn tùy vào ý bạn nói về "ghép nối p2p" trong WebRTC là gì.

  1. Trạng thái có thể giao tiếp gói tin với nhau qua UDP
  2. Trạng thái chỉ biết địa chỉ mà STUN báo cho hai bên

Nếu là trường hợp 1 thì đúng như bạn nói, không cần TURN.
Ngay cả ở trường hợp 2, nếu tình huống thuận lợi và việc giao tiếp UDP hai chiều đã thành công thì cũng không cần TURN.

Trong trường hợp 2, nếu việc giao tiếp gói tin qua UDP giữa hai bên thất bại thì cần TURN.

Các yếu tố gây thất bại là

  • peer ở sau symmetric NAT nên không thể dùng địa chỉ (hoặc cổng) mà STUN tìm ra, hoặc
  • ở đâu đó giữa mạng chỉ cho phép web traffic (80, 443), hoặc
  • ở đâu đó giữa mạng chặn UDP, hoặc
  • một bên chỉ dùng IPv4 còn bên kia chỉ dùng IPv6, hoặc
  • v.v.?

thì phải dùng TURN.

(Tôi cũng mới biết là IPv4 only <-> IPv6 only không hoạt động, trong lúc kiểm tra lại trí nhớ.)

 
skageektp 2025-10-30

Vâng, ý tôi là mục số 2. Đã nói là “liên kết với nhau mà không cần máy chủ”, lại còn là “thư viện”, thì có phải bạn đang kỳ vọng quá nhiều rồi không...

 
kimjoin2 2025-10-30

Bạn đang muốn nói đến phần nào vậy?

  1. Chỉ cần địa chỉ (+ cổng) do STUN cung cấp là có thể kết nối được, nên không cần máy chủ TURN. Vì vậy cách diễn đạt "kết nối với nhau mà không cần máy chủ" là đúng theo đúng nghĩa đen của câu chữ.
    -> Nếu là ý này thì có lẽ kiến thức của tôi đã cũ rồi. Nếu có phần nào tình hình đã thay đổi sau những gì tôi biết (và đã chia sẻ), mong bạn cho tôi biết nhé~!
  2. Vẫn cần máy chủ TURN, nhưng vì là thư viện nên thôi cứ chấp nhận đến mức đó đi.
    -> Điều skageektp nói là đúng. Vì là thư viện nên cũng có thể bỏ qua ở mức đó. Là tôi đã quá nhạy cảm.

Ý tôi là
3. Nếu dùng cho ra hồn thì chỉ STUN là không đủ, vẫn cần TURN, nên cách nói đó hơi cường điệu quá~
đó mới là điều tôi muốn diễn đạt.

 
kimjoin2 2025-10-29

Về phần giải thích số 1 và 2

  1. trạng thái có thể giao tiếp gói tin UDP với nhau -> trạng thái các peer có thể giao tiếp gói tin UDP với nhau
  2. trạng thái chỉ biết địa chỉ do STUN cung cấp cho nhau -> trạng thái các peer chỉ biết địa chỉ do STUN cung cấp cho nhau

Xin đính chính lại như vậy. Trong bài gốc có thể gây hiểu nhầm.