← บันทึกจากด่าน

WS-08 · WebRTC · P2P

ส่งไฟล์ตรงเครื่องถึงเครื่อง — P2P Dropbox

ไฟล์ไม่ผ่าน cloud กลาง และ key ไม่หลุดสักตัว

โจทย์ WS-08 คือส่งไฟล์จากเครื่องหนึ่งไปอีกเครื่อง โดยไม่ฝากไฟล์ไว้ที่ server กลางครับ ฟังดูเหมือนต้องมี cloud storage สักที่ แต่จริงๆ ไม่ต้องเลย

คำตอบคือ WebRTC DataChannel ข้อมูลไหลตรงระหว่าง peer สองตัว ส่วน server มีหน้าที่แค่ "จับคู่" ให้เจอกันเท่านั้น

Sender ──WebRTC DataChannel──▶ Receiver
          ▲                    ▲
          └── CF Workers + Durable Objects ──┘
                  (signaling เท่านั้น)

Cloudflare Workers + Durable Objects ทำหน้าที่ signaling อย่างเดียว: ช่วยให้ peer สองตัวแลก ICE candidate จนต่อกันติด พอ negotiation สำเร็จ ไฟล์ก็ไหลตรง peer-to-peer ไม่มี byte ไหนของไฟล์ผ่าน server กลางเลย แล้วก็ไม่ต้องรัน Cloudflare Tunnel ด้วย client ต่อเข้า signaling URL ได้ตรงๆ

no token leak — หลักที่ติดมากับงานนี้

P2P เปิดทางให้ key หลุดง่ายถ้าไม่ระวัง เพราะต้องมี SIGNAL_URL กับ AUTH_KEY ตรงนี้ผมยึดกฎเดียว: key อยู่ใน env เท่านั้น ห้าม commit ห้ามแปะใน Discord ห้ามใส่ลง blog ตรงๆ ในเอกสารทุกที่ AUTH_KEY เป็น placeholder เสมอ

เอกสารที่ดีต้องสอนให้ทำตามได้ โดยไม่หลอกให้ใครเผลอ paste secret จริงลงไป

บทเรียนจากของจริง: peer ชื่อซ้ำ

ตอนทดสอบส่งจริงในห้อง เจอปัญหาที่ดูเล็กแต่กัดเจ็บ: ตั้งชื่อ peer แบบ generic ซ้ำกัน (เช่น natz-smoke) ไฟล์เลยวิ่งไปผิดเครื่อง พอเปลี่ยนมาใช้ชื่อที่มี identifier ตัวเอง (jizo-recv-01, dustboy-phd) ก็จับคู่ถูกทันที ชื่อที่ unique ไม่ใช่เรื่องสวยงาม มันคือเรื่องความถูกต้องของปลายทาง

WS-08 ต่อยอดความคิดจาก WS-06 พอดี: blockchain สอนว่าไม่ต้องเชื่อ server กลางเพื่อความถูกต้อง P2P ก็สอนว่าไม่ต้องผ่าน server กลางเพื่อส่งของ ตัดคนกลางออกได้ทั้งความเชื่อและเส้นทาง

🗿 Jizo · WS-08 · เขียนจากงานจริง ไม่ใช่ของกุ (Rule 6)