آشنایی کامل با وب‌سوکت در Go

وب‌سوکت (WebSocket) یکی از پروتکل‌های کاربردی و قدرتمند برای برقراری ارتباط دوطرفه بین سرور و کلاینت است. در این مقاله، به صورت کامل و عملی نحوه استفاده از وب‌سوکت در زبان برنامه‌نویسی Go را بررسی خواهیم کرد.

وب‌سوکت چیست؟

وب‌سوکت یک پروتکل ارتباطی است که امکان ارسال و دریافت داده‌ها به صورت همزمان و بدون نیاز به درخواست مکرر HTTP را فراهم می‌کند. این تکنولوژی برای اپلیکیشن‌هایی که نیاز به تعامل بلادرنگ دارند، مانند چت آنلاین یا بازی‌های چندنفره، بسیار مناسب است.

ایجاد سرور وب‌سوکت در Go

برای شروع، باید یک سرور ساده وب‌سوکت ایجاد کنیم. کتابخانه محبوب github.com/gorilla/websocket یکی از بهترین ابزارها برای کار با وب‌سوکت در Go است.

package main

import (
    "fmt"
    "net/http"
    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    CheckOrigin: func(r *http.Request) bool {
        return true // برای ساده‌تر کردن مثال، اجازه دسترسی همه مبداها داده شده است.
    },
}

func handleConnections(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        fmt.Println("خطا هنگام ارتقاء اتصال:", err)
        return
    }
    defer conn.Close()

    for {
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            fmt.Println("خطا هنگام خواندن پیام:", err)
            break
        }
        fmt.Printf("پیام دریافتی: %s\n", message)

        // ارسال پیام مجدد به کلاینت
        if err = conn.WriteMessage(messageType, message); err != nil {
            fmt.Println("خطا هنگام ارسال پیام:", err)
            break
        }
    }
}

func main() {
    http.HandleFunc("/ws", handleConnections)
    fmt.Println("سرور در حال اجرا بر روی پورت 8080")
    http.ListenAndServe(":8080", nil)
}

توضیح کد

  • Upgrader: وظیفه تبدیل اتصال HTTP به WebSocket را دارد.
  • handleConnections: این تابع مسئول مدیریت ارتباطات کلاینت‌ها است.

ارتباط کلاینت با سرور

برای اتصال یک کلاینت به سرور، می‌توان از مرورگر یا ابزارهایی مثل JavaScript استفاده کرد:

const socket = new WebSocket('ws://localhost:8080/ws');
socket.onopen = () => console.log('ارتباط برقرار شد!');
socket.onmessage = (event) => console.log(`پیام دریافتی: ${event.data}`);
socket.onerror = (error) => console.error('خطا:', error);
socket.onclose = () => console.log('ارتباط بسته شد.');

کاربردهای عملی وب‌سوکت

  • چت آنلاین بلادرنگ
  • بازی‌های چندنفره آنلاین
  • نمایش وضعیت سیستم به صورت زنده

جمع‌بندی

وب‌سوکت یک راهکار عالی برای ایجاد ارتباط بلادرنگ بین سرور و کلاینت است. با استفاده از زبان Go و کتابخانه‌های مرتبط، می‌توانید سریعاً پروژه‌های حرفه‌ای خود را توسعه دهید.