0Pricing
Go Academy · บทเรียน

พื้นฐาน WebSocket

การสื่อสารสองทิศทางแบบเรียลไทม์

พื้นฐาน WebSocket เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

การสื่อสารแบบเรียลไทม์สองทาง

HTTP ใช้รูปแบบคำขอ-การตอบกลับ: ไคลเอนต์ถาม เซิร์ฟเวอร์ตอบ แล้วการเชื่อมต่อจะสิ้นสุดลงในเชิงตรรกะ สำหรับแชต แดชบอร์ดสด และเกม คุณต้องมีช่องทางแบบถาวรที่สื่อสารได้สองทิศทาง ซึ่งก็คือสิ่งที่ WebSockets มอบให้

การจับมือเพื่ออัปเกรด

การเชื่อมต่อ WebSocket เริ่มต้นเป็นคำขอ HTTP ปกติที่มีส่วนหัวพิเศษ:

  • Upgrade: websocket
  • Connection: Upgrade

เซิร์ฟเวอร์ตอบกลับด้วย 101 Switching Protocols แล้วนำซ็อกเก็ต TCP กลับมาใช้สำหรับเฟรมแบบสองทางเต็มรูปแบบ

เหตุใดจึงไม่ใช้การสำรวจเป็นระยะ

ก่อนมี WebSockets แอปใช้การสำรวจเป็นระยะ (ส่งคำขอซ้ำ ๆ) หรือการสำรวจแบบรอนาน ทั้งสองวิธีสิ้นเปลืองแบนด์วิดท์และเพิ่มความหน่วง WebSockets จะคงการเชื่อมต่อหนึ่งรายการไว้ จึงทำให้ทั้งสองฝ่ายส่งข้อมูลได้ทันที

เฟรมแทนคำขอ

หลังจากอัปเกรดแล้ว ข้อมูลจะเดินทางเป็นเฟรมน้ำหนักเบาแทนข้อความ HTTP เฟรมอาจเป็นข้อความหรือข้อมูลไบนารี และยังมีเฟรมควบคุมสำหรับ ping/pong และการปิดการเชื่อมต่อ

การสื่อสารสองทางเต็มรูปแบบ

ต่างจาก HTTP ตรงที่เพียร์ทั้งสองฝ่ายสามารถส่งข้อมูลได้ทุกเมื่อโดยไม่ต้องรอการตอบกลับ เซิร์ฟเวอร์สามารถส่งการแจ้งเตือนได้ทันทีที่มีการเปลี่ยนแปลง และไคลเอนต์สามารถส่งอินพุตไปพร้อมกันได้

ws เทียบกับ wss

เช่นเดียวกับ http/https WebSockets มีโครงร่างอยู่สองแบบ:

  • ws:// แบบข้อความไม่เข้ารหัส
  • wss:// ผ่าน TLS (ใช้แบบนี้ในการใช้งานจริง)

การรองรับจากไลบรารีมาตรฐาน

ไลบรารีมาตรฐานของ Go ไม่มีการใช้งาน WebSocket ใน net/http เพียงอย่างเดียว ชุมชนนักพัฒนาจึงใช้ github.com/gorilla/websocket หรือ nhooyr.io/websocket เราจะกล่าวถึงไลบรารี gorilla ในบทเรียนถัดไป

import "github.com/gorilla/websocket"

แบบจำลองทางความคิด

ลองนึกภาพ WebSocket ว่าเป็นการคุยโทรศัพท์:

  • การกดโทรออก = การจับมือเพื่ออัปเกรด HTTP
  • สายที่เปิดอยู่ = การเชื่อมต่อแบบคงอยู่
  • การพูดคุยโต้ตอบกัน = เฟรมแบบสื่อสารสองทิศทางพร้อมกัน
  • การวางสาย = เฟรมปิด

ประเภทของข้อความ

เฟรมข้อมูลสองประเภทที่สำคัญที่สุดมีดังนี้:

  • ข้อความ เฟรมประเภทนี้บรรจุ UTF-8 ซึ่งมักเป็น JSON
  • ไบนารี เฟรมประเภทนี้บรรจุไบต์ดิบ เช่น โพรโทคอลบัฟเฟอร์และรูปภาพ

เฟรมควบคุม เช่น ping, pong และ close ใช้จัดการตัวการเชื่อมต่อเอง

จุดเด่นของ WebSockets

เหมาะอย่างยิ่งสำหรับ:

  • แชตและสถานะออนไลน์
  • การซื้อขายหรือคะแนนกีฬาแบบเรียลไทม์
  • การแก้ไขเอกสารร่วมกัน
  • สถานะเกมแบบผู้เล่นหลายคน

หากต้องการส่งข้อมูลทางเดียวจากเซิร์ฟเวอร์ไปยังไคลเอ็นต์เท่านั้น เหตุการณ์ที่เซิร์ฟเวอร์ส่งถึงไคลเอ็นต์อาจเรียบง่ายกว่า

ตัวอย่างที่รันได้: ทำความเข้าใจเฟรม

โค้ด WebSocket ต้องใช้ไลบรารีภายนอก ดังนั้นเราจะใช้การเปรียบเทียบโดยใช้ไลบรารีมาตรฐานแทน: ฟังก์ชันที่จัดประเภทข้อความว่าเป็นข้อความหรือไบนารี เพื่อแสดงแนวคิดเรื่องประเภทเฟรม

package main

import (
    "fmt"
    "unicode/utf8"
)

func frameType(data []byte) string {
    if utf8.Valid(data) {
        return "text"
    }
    return "binary"
}

func main() {
    fmt.Println(frameType([]byte("hello")))
    fmt.Println(frameType([]byte{0xff, 0x00, 0x01}))
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจพื้นฐานของ WebSocket

สรุปทบทวน

คุณได้เรียนรู้พื้นฐานของ WebSocket ดังนี้:

  • WebSocket ให้การสื่อสารแบบคงอยู่และสื่อสารสองทิศทางพร้อมกัน
  • เริ่มต้นด้วยการจับมือเพื่ออัปเกรด HTTP ซึ่งให้การตอบกลับ 101
  • ข้อมูลไหลผ่านเฟรมข้อความหรือไบนารี ส่วนเฟรมควบคุมใช้จัดการการเชื่อมต่อ
  • ใช้ wss:// ในสภาพแวดล้อมจริง ส่วน Go อาศัยไลบรารีอย่าง gorilla/websocket

คำถามที่พบบ่อย

บทเรียน “พื้นฐาน WebSocket” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พื้นฐาน WebSocket” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน WebSocket”

การสื่อสารสองทิศทางแบบเรียลไทม์ คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “พื้นฐาน WebSocket” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน WebSocket
  2. การใช้ gorilla/websocket
  3. การกระจายข้อความ
  4. การจัดการการเชื่อมต่อ
← กลับไปที่ Go Academy