• อัปโหลด

WebSocket กับ HTTP จริงๆ แล้วเกี่ยวกันยังไง? อธิบายครบทั้งแฮนด์เชก เฟรม มาสก์ และฮาร์ตบีต

34.5K
20
2026-08-23 13:24:58
1536
387
3093
83
# บทช่วยสอน WebSocket ฉบับสมบูรณ์ ## 1. ชื่อเรื่อง WebSocket และ HTTP แท้จริงแล้วมีความสัมพันธ์กันอย่างไร? เจาะลึกการจับมือ (Handshake), เฟรม, เมสกิน (Mask), และการส่งสัญญาณชีพจร (Heartbeat) แบบเคลียร์ชัด ## 2. คำอธิบาย กำลังทำระบบข้อความแบบเรียลไทม์ แล้วยังให้ฝั่งหน้าบ้าน (Frontend) ดึงข้อมูล (Polling) ทุกๆ หนึ่งวินาทีอยู่หรือเปล่า? ผู้ใช้ออนไลน์หนึ่งร้อยคน สร้างคำขอหกพันครั้งต่อนาที, ซึ่งคำตอบส่วนใหญ่คือสามคำนี้: ไม่มีข้อความใหม่—— ต้นตอเป็นเพราะ HTTP อนุญาตให้ฝั่งไคลเอนต์ถาม และฝั่งเซิร์ฟเวอร์ตอบเท่านั้น วิดีโอนี้ใช้แอนิเมชันตลอดทั้งเรื่อง เพื่อร้อยเรียงกลไกหลักของ WebSocket เข้าด้วยกันในครั้งเดียว: ไม่ต้องจำ API พูดถึงแค่ "หลังจากการจับมือกันหนึ่งครั้งแล้ว ในที่สุดการเชื่อมต่อนี้กลายเป็นอะไร" ✅ คุณจะได้เข้าใจ: · การจับมือ (Handshake): คำขอ GET ที่มีเฮดเดอร์ Upgrade ทำไมถึงได้รับ 101 กลับมาแทนที่จะเป็น 200 · Sec-WebSocket-Key และ Accept: มันพิสูจน์แค่ว่าอีกฝ่ายฟังรู้เรื่อง ไม่ใช่มาตรการความปลอดภัยแต่อย่างใด · โครงสร้างเฟรม: FIN, opcode, ความยาวแบบแปรผัน, เฮดเดอร์เฟรมที่สั้นที่สุดใช้เวลาแค่ 2 ไบต์ · ความยาวที่มีแค่ 7 บิต, เมื่อใส่ 126 และ 127 จะต้องอ่านเพิ่มอีกกี่ไบต์ · เมสกิน (Mask): ทำไมฝั่งไคลเอนต์ต้องใส่ แต่ฝั่งเซิร์ฟเวอร์กลับห้ามใส่ (คำตอบเกี่ยวข้องกับการวางยาแคช Cache Poisoning) · การเดินทางอันครบถ้วนของข้อความหนึ่ง: send → UTF-8 → ใส่เฮดเดอร์เฟรม → XOR → เฟรม → onmessage · การส่งแบบแบ่งส่วน (Fragmentation): FIN และ opcode ทำงานร่วมกันอย่างไร, ผู้รับประกอบข้อความที่สมบูรณ์กลับมาอย่างไร · ฮาร์ทบีท (Heartbeat): การเชื่อมต่ออาจตายอย่างเงียบๆ โดยไม่ทริกเกอร์ close, Ping/Pong และการเชื่อมต่อใหม่แบบ Exponential Backoff · การเลือกใช้งานระหว่าง Long Polling / SSE / WebSocket, เมื่อไหร่ที่ SSE นั้นเพียงพอ · ปัญหาความท้าทายของคลัสเตอร์: ผู้ใช้เชื่อมต่ออยู่กับเครื่องไหน? การบรอดแคสต์เทียบกับการบันทึกเส้นทาง (Route), การโหลดบาลานซ์ต้องมีการคงเซสชัน (Session Persistence) · ประเด็นสำคัญในการผลิต: การจับมือไม่สามารถกำหนดเฮดเดอร์คำขอเองได้จะยืนยันตัวตนอย่างไร, Nginx ลืมตั้งค่า Upgrade ทำให้ล้มเหลวทันที · คำเตือนสำคัญ: มันรับประกันแค่ลำดับแต่ไม่รับประกันการส่งถึง อย่าฝากความน่าเชื่อถือไว้ที่มัน ⏱ ไทม์ไลน์บท (คลิกเพื่อข้าม) 00:00 อินโทร: เพื่อความเรียลไทม์ หน้าบ้านจึงถามทุกๆ หนึ่งวินาที 00:52 จับมือหนึ่งครั้ง เปลี่ยน HTTP ให้เป็นช่องทางสื่อสารสองทาง 01:52 เฟรม: ข้อมูลถูกตัดแบ่งในท่ออย่างไร 02:36 เมสกิน: ทำไมฝั่งไคลเอนต์ต้องใส่ 03:28 การเดินทางอันครบถ้วนของข้อความ 04:20 ฮาร์ทบีทและการเชื่อมต่อใหม่: การเชื่อมต่อจะตายอย่างเงียบๆ 05:12 วิธีเลือกใช้ระหว่าง Long Polling และ SSE 06:04 เมื่อขึ้นคลัสเตอร์ ปัญหาก็เริ่มต้นขึ้นจริงๆ 06:56 การยืนยันตัวตน พร็อกซี และประเด็นสำคัญในการผลิต 07:48 เมื่อไหร่ที่ไม่ควรใช้ WebSocket 08:40 สรุปแก่นสำคัญ + จบท้าย > ไทม์ไลน์เป็นค่าประมาณ หลังจากเรนเดอร์เสร็จแล้ว ให้ใช้ `ffprobe` ดึงความยาวจริงทีละช่วงเพื่อทำการเทียบมาตรฐานอีกครั้ง เหมาะสำหรับ: นักพัฒนาหน้าบ้าน (Frontend), หลังบ้าน (Backend), ผู้ที่ต้องการเติมเต็มเรื่องการสื่อสารแบบเรียลไทม์, ผู้ที่ต้องใช้ WebSocket ในการสัมภาษณ์ เข้าใจพื้นฐาน HTTP เพียงเล็กน้อยก็เริ่มต้นได้ แม้ไม่มีพื้นฐานก็เรียนตามได้ สรุปในประโยคเดียว: WebSocket = การจับมือหนึ่งครั้ง + การเชื่อมต่อระยะยาว + สองทางเท่าเทียมกัน มันคือช่องทาง ไม่ใช่คิวข้อความ (Message Queue) หากรู้สึกว่ามีประโยชน์ ฝากกดซิงเหลียน (กดไลค์ กดติดตาม แชร์) สนับสนุนด้วยนะ~ หากมีข้อสงสัยยินดีแลกเปลี่ยนกันในคอมเมนต์ ติดตาม "Duoke Web" duoke360.com เพื่อเรียนรู้การพัฒนาแบบ Full-stack ## 3. แท็ก (Tag) #WebSocket #การสื่อสารเรียลไทม์ #พัฒนาเว็บไซต์หน้าบ้าน #พัฒนาเว็บไซต์หลังบ้าน #เครือข่ายคอมพิวเตอร์ #HTTP #SSE #บทช่วยสอนเขียนโปรแกรม #การเชื่อมต่อระยะยาว #การส่งข้อความด่วน #โปรแกรมเมอร์ #Nginx #Redis #สัมภาษณ์งาน #JavaScript #แบบกระจาย (Distributed) --- ## 4. คำสำคัญ (Keywords) WebSocket, บทช่วยสอน WebSocket, เริ่มต้นใช้งาน WebSocket, หลักการ WebSocket, การสื่อสารเรียลไทม์, การเชื่อมต่อระยะยาว, ฟูลดูเพล็กซ์ (Full-duplex) WebSocket คืออะไร, กระบวนการจับมือของ WebSocket, 101 Switching Protocols, เฮดเดอร์ Upgrade, Sec-WebSocket-Key, โครงสร้างเฟรม WebSocket, opcode คืออะไร, บิตสถานะ FIN, WebSocket Mask, ทำไมไคลเอนต์ต้องทำ Mask, การวางยาแคช, การแบ่งส่วน WebSocket, ฮาร์ทบีท WebSocket, เฟรมควบคุม Ping Pong, การเชื่อมต่อใหม่เมื่อหลุด, การถอยหลังแบบเอ็กซ์โปเนนเชียล (Exponential Backoff), WebSocket vs SSE, WebSocket vs Long Polling, SSE Server-Sent Events, WebSocket Cluster, การคงเซสชัน (Session Persistence), Redis Pub/Sub, การกำหนดเส้นทางเชื่อมต่อ, การยืนยันตัวตน WebSocket, จะวาง Token ไว้ที่ไหน, Nginx Reverse Proxy WebSocket, proxy_set_header Upgrade, wss คืออะไร, ข้อความ WebSocket สูญหาย, การส่งมอบ WebSocket ที่เชื่อถือได้
编程其实很简单,只要方法对了。我的个人博客duoke360.com
206.3K การเล่น
ข้อมูลเบื้องต้น
WebSocket กับ HTTP จริงๆ แล้วเกี่ยวกันยังไง? อธิบายครบทั้งแฮนด์เชก เฟรม มาสก์ และฮาร์ตบีต
09:17
ทำไม gRPC ถึงเร็วกว่า HTTP+JSON? อธิบายครบถ้วนทั้ง Protobuf, HTTP2 และสตรีมทั้ง 4 แบบ
10:02
ทำไม HTTP3 ถึงทอดทิ้ง TCP? อธิบายเรื่อง Head-of-Line Blocking, 0-RTT และ Connection Migration ของ QUIC แบบละเอียดยิบ
09:49
JSON, Protobuf, Avro, Thrift ต่างกันอย่างไร? อธิบายเรื่อง Varint, ZigZag และหมายเลขฟิลด์ให้เข้าใจในครั้งเดียว
10:54
ทำไม GraphQL ถึงโค่น REST ได้? ขอข้อมูลแค่ครั้งเดียวก็ได้ข้อมูลที่ต้องการพอดี
11:24
ทำไม IoT ถึงไม่ใช้ HTTP? กวดวิชา MQTT ฉบับสมบูรณ์
13:21
การออกแบบสถาปัตยกรรมซอฟต์แวร์ - การออกแบบกลไกมิดเดิลแวร์ - จำกัดอัตราแล้วยังโดนถล่มอีกเหรอ? อธิบายลำดับมิดเดิลแวร์ การลัดวงจร และบริบทอย่างละเอียด
10:40
เขียนฟังก์ชันได้ แบกรับระบบไหวไหม? บทเรียนแรกของสถาปัตยกรรมซอฟต์แวร์
10:11
สถาปัตยกรรมซอฟต์แวร์ · การออกแบบศูนย์กำหนดค่า - ศูนย์กำหนดค่าล่ม บริการยังจะสตาร์ทได้ไหม? อธิบายครบถ้วนทั้ง 4 ควอแดรนท์, Long Polling และ Gray Release
12:35
OAuth 2.0 ไม่ใช่โปรโตคอลการยืนยันตัวตน: สิ่งที่ตอบคำถามว่า 'คุณคือใคร' จริงๆ คือ OIDC
14:19
JWT สามารถแทนที่ Session ได้จริงหรือ? ความจริงของการเข้าสู่ระบบแบบไร้สถานะ (Stateless)
15:09
วินาทีที่คุณกด Enter DNS ค้นหาไปกี่ครั้ง?
12:14
รูปภาพเดียวอธิบายต้นทาง: แท้จริงแล้ว CDN บล็อกอะไรไว้บ้าง
12:08
CSRF คืออะไร? คู่มือฉบับสมบูรณ์เกี่ยวกับการปลอมแปลงคำขอข้ามเว็บไซต์
06:02
คำแนะนำฉบับเต็มเกี่ยวกับ API Gateway: ประตูบานแรกสู่ไมโครเซอร์วิส
12:05
ทำไม LIKE ใน MySQL ถึงช้าจัง? บทเรียนครบวงจรของ ElasticSearch
05:59
โค้ดกลายเป็นแรงดันไฟฟ้าได้อย่างไร? วิดีโอเดียวอธิบายหลักการของสถาปัตยกรรมคอมพิวเตอร์อย่างละเอียด
07:47
MongoDB การปฏิบัติจริงระดับองค์กร: บทนำหลักสูตร - คุณกล้าที่จะนำ MongoDB ไปใช้ในการผลิตหรือไม่ หากคุณทำได้แค่เพิ่ม ลบ แก้ไข และสอบถามเท่านั้น?
09:46
เกินเวลาไปสามวินาที สต็อกถูกหักไปหรือยัง? บทเรียนฉบับสมบูรณ์เกี่ยวกับ Distributed Transactions
14:54
ใช้เวลาแค่ 20 บรรทัด แต่กวาดไปถึงหนึ่งล้านบรรทัด? คู่มือฉบับสมบูรณ์สำหรับการปรับแต่งประสิทธิภาพ SQL
17:45
ทั้งสองคนอ่านค่าได้ 1 ทำไมสต็อกถึงกลายเป็นลบหนึ่งได้? 튜토리얼완전한บทเรียนเรื่องทรานแซกชันและการควบคุมการทำงานพร้อมกัน
15:43
เปลี่ยนเบอร์โทรศัพท์เบอร์เดียว อัปเดตแปดหมื่นบรรทัด? บทเรียนฉบับสมบูรณ์เกี่ยวกับการออกแบบฐานข้อมูลและรูปแบบบรรทัดฐาน
25:15
ส่งออกครั้งเดียวทำฐานข้อมูลหลักล่ม? สอนวิธีแยกการอ่านและเขียนฐานข้อมูลแบบสมบูรณ์
16:21
แค่ตารางเดียวยอดถึงยี่สิบล้านก็ต้องแบ่งตารางแล้วเหรอ? สอนวิธีแยกฐานข้อมูลและแบ่งตารางแบบฉบับสมบูรณ์
13:16
นาฬิกาย้อนกลับไป 3 มิลลิวินาที ทําไมเลขที่คำสั่งซื้อถึงชนกัน? กวดวิชาที่สมบูรณ์แบบสำหรับ Snowflakes Algorithm
16:23
เปิดใช้งานได้เต็มระบบ ทำไมคำสั่งซื้อเมื่อวานช่วงบ่ายถึงกู้คืนไม่ได้? บทเรียนฉบับสมบูรณ์เกี่ยวกับการสำรองและกู้คืนข้อมูล
15:01
ความแตกต่างระหว่าง TCP และ UDP อธิบายให้เข้าใจในครั้งเดียว (ทำไมวิดีโอถึงภาพแตก แต่ไฟล์ข้อมูลไม่ผิดพลาดเลยสักไบต์)
11:21
บน Wi-Fi ของคาเฟ่ ทำไมรหัสผ่านถึงเป็นข้อความตัวอักษรธรรมดา? คู่มือฉบับสมบูรณ์เกี่ยวกับ HTTP และ HTTPS
14:18
คอมพิวเตอร์เครื่องนี้จำคุณได้ แต่เครื่องนั้นไม่จำ: อธิบาย Cookie และ Session ให้เข้าใจ in a single video
16:15
บริการลูกค้า
ด้านบน
赛事库 课堂 2021拜年纪