12/04/2026 18:17น.

EP.98 การใช้ WebSocket กับ Blockchain สำหรับการส่งข้อมูลแบบเรียลไทม์
#WebSocket
#Blockchain
#Golang
#Real-time Data
ในการพัฒนาแอปพลิเคชันที่ต้องติดตาม ธุรกรรม (Transaction) หรือ Event บนระบบ Blockchain เช่น Wallet, Exchange, NFT Marketplace หรือ Realtime Dashboard — ความเร็วในการรับข้อมูลแบบ เรียลไทม์ คือสิ่งสำคัญ
การใช้ WebSocket ช่วยให้เราสามารถ ติดตาม Blockchain Events ได้ทันทีทันใด โดยไม่ต้อง polling หรือ query database ซ้ำ ๆ ซึ่งช่วยลด Latency และเพิ่มความแม่นยำของข้อมูลได้อย่างมาก
1. ทำไมต้องใช้ WebSocket กับ Blockchain
✅ ระบบ Blockchain ส่วนใหญ่ไม่มีฟังก์ชัน Push ข้อมูลแบบ Native
✅ WebSocket ช่วยให้สามารถ "Subscribe" เหตุการณ์ใหม่ได้ทันที
✅ ลดภาระการ query และ latency ในการแจ้งเตือนธุรกรรม
✅ เหมาะกับระบบที่ต้องการแจ้งเตือนแบบ Real-time เช่น dApp, Wallet, Exchange
2. การเชื่อมต่อ Blockchain Node ผ่าน WebSocket
Blockchain หลายแพลตฟอร์ม เช่น Ethereum, Solana, หรือ Bitcoin รองรับ WebSocket RPC สำหรับใช้งานแบบ Subscribe
ตัวอย่างโค้ด Go เชื่อมต่อ Ethereum WebSocket RPC:
package main
import (
"context"
"fmt"
"log"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, err := ethclient.Dial("wss://mainnet.infura.io/ws/v3/YOUR_PROJECT_ID")
if err != nil {
log.Fatal(err)
}
query := ethereum.FilterQuery{}
logs := make(chan ethereum.Log)
sub, err := client.SubscribeFilterLogs(context.Background(), query, logs)
if err != nil {
log.Fatal(err)
}
fmt.Println("Subscribed to blockchain events")
for {
select {
case err := <-sub.Err():
log.Println("Subscription error:", err)
case vLog := <-logs:
fmt.Println("New event:", vLog)
}
}
}
3. การส่งข้อมูลแบบเรียลไทม์ให้ Client
เมื่อ Backend ได้รับ Event จาก Blockchain แล้ว ก็สามารถใช้ WebSocket เพื่อ Broadcast ข้อมูลไปยัง Client หลายรายได้ทันที
แนวทาง:
- แยก room/topic ตามประเภท event หรือ address เฉพาะ
- ใช้ Goroutine เพื่อไม่ให้การส่ง event ไป client บล็อกการทำงานอื่น
for event := range blockchainEvents {
for client := range clients {
client.WriteJSON(event)
}
}
4. การจัดการ Security
🔒 ในการเปิดให้ Client ภายนอกเชื่อมต่อ WebSocket จำเป็นต้องมีมาตรการความปลอดภัย เช่น:
- ✅ ตรวจสอบ Client Authentication (API Key / JWT) ก่อน subscribe
- ✅ ใช้ TLS (
wss://) สำหรับเข้ารหัสข้อมูล - ✅ ป้องกัน Spam หรือ Flood ด้วย Rate Limit + CAPTCHA
- ✅ Log ทุกการ subscribe เพื่อตรวจสอบย้อนหลัง
5. Best Practices
🛠️ เพื่อให้ระบบทำงานได้อย่างมีประสิทธิภาพใน production ควร:
✅ ใช้ buffered channel เพื่อ queue ข้อมูล event
✅ แยก Service ของ WebSocket และ Blockchain Listener
✅ Monitor Connection State และ Reconnect อัตโนมัติ
✅ ใช้ Encoding แบบ Binary หรือ Compression เพื่อลดขนาด payload
✅ ทดสอบกับ load จริงเพื่อดูการ scale และ latency จริง
🎯 Challenge ก่อนเข้าสู่ EP ถัดไป
หากคุณอยากฝึกใช้ WebSocket กับ Blockchain จริง ลองทำ Challenge นี้:
✅ เชื่อมต่อ Ethereum Mainnet ผ่าน Infura WebSocket
✅ Subscribe เหตุการณ์ Smart Contract (Log Event)
✅ Broadcast ไปยัง client ที่เชื่อมต่อแบบเรียลไทม์
✅ ทดสอบระบบโดยจำลอง client 5–10 ราย พร้อม latency log
✅ ตรวจสอบว่า server handle ได้แบบ non-blocking
ลองวัด performance และความเสถียรของระบบดู แล้วคุณจะเข้าใจภาพรวมของ real-time blockchain service ได้ชัดเจนมากขึ้น!
🚀 สรุป
WebSocket คือเทคโนโลยีที่เหมาะสำหรับการเชื่อมต่อระบบ Blockchain เพื่อการส่งข้อมูลแบบทันที โดยเฉพาะกับ Event ที่เปลี่ยนแปลงบ่อยในระบบ On-chain เช่น:
✅ New Block
✅ Smart Contract Events
✅ Token Transfer
✅ Pending Transaction
ด้วยแนวทางที่เหมาะสม WebSocket Server ของคุณจะสามารถ:
- รับฟังข้อมูลจาก Blockchain แบบเรียลไทม์
- Broadcast ไปยังผู้ใช้งานได้อย่างแม่นยำ
- ทำงานได้อย่างปลอดภัย และพร้อม Scale
🔜 Next EP (EP.99):
การทำ WebSocket Server ให้รองรับการทำงานในสถานการณ์ที่มีการเชื่อมต่อสูง (High Traffic)
เรียนรู้การวางระบบที่สามารถรองรับ Client หลายพันรายแบบพร้อมกัน และยังคงรักษา Performance ได้อย่างมั่นคง
หากพร้อมแล้ว ไปต่อกับโลกของ Real-time Blockchain กันเลย! 🌐⚡️
อ่านบทความ Series อื่นๆ
🔵 Facebook: https://www.facebook.com/superdev.academy.th
🔴 YouTube : Superdev Academy
📸 Instagram: Superdev Academy
🎬 TikTok: https://www.tiktok.com/@superdevacademy?lang=th-TH
🌐 Website: https://www.superdevacademy.com/