مكتبة WebSocket Gorilla للغة Go (Golang): دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Gorilla WebSocket: أداة قوية للوقت الفعلي على Go



في تطوير الويب الحديث، تزداد الحاجة إلى تبادل البيانات في الوقت الفعلي بشكل متزايد. سواء كانت الدردشات، الألعاب عبر الإنترنت، مراقبة الخوادم أو أسعار البورصة — فإن WebSocket هو المعيار الفعلي للاتصال ثنائي الاتجاه بين العميل والخادم. بالنسبة للغة Go (Golang)، واحدة من أشهر وأكثر المكتبات استقرارًا للعمل مع WebSocket هي Gorilla WebSocket.



مكتبة gorilla/websocket هي جزء من نظام Gorilla Toolkit — مجموعة من الحزم عالية الجودة لتطوير الويب على Go. توفر مجموعة كاملة من الوظائف لإنشاء خوادم وعملاء WebSocket، وتدعم جميع البروتوكولات الرئيسية (RFC 6455) وتتميز بسهولة الاستخدام.



الميزات الرئيسية لـ Gorilla WebSocket



  • دعم كامل لبروتوكول WebSocket — العمل مع الإطارات النصية والثنائية، تجزئة الرسائل، إطارات التحكم (ping/pong).
  • واجهة برمجة تطبيقات مريحة — واجهة بسيطة مع دوال ReadMessage و WriteMessage.
  • دعم TLS/SSL — اتصالات WebSocket آمنة (wss://).
  • إعدادات مرنة — إمكانية تحديد المهلات الزمنية، أحجام المخازن المؤقتة، التحقق من مصدر الطلبات.
  • التوافق مع HTTP — يتكامل بسهولة مع أي خادم HTTP في Go (net/http).
  • العمل مع السياقات — دعم context.Context لإلغاء العمليات.


تثبيت المكتبة



لتثبيت Gorilla WebSocket، قم بتنفيذ الأمر في الطرفية:



go get github.com/gorilla/websocket


بعد ذلك، أضف الاستيراد إلى ملف Go الخاص بك:



import "github.com/gorilla/websocket"


مثال أساسي لخادم WebSocket



لننظر إلى خادم صدى بسيط، يستقبل اتصالات WebSocket ويعيد إرسال الرسائل المستلمة.



package main

import ( "log" "net/http"

"github.com/gorilla/websocket")

var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true // السماح بجميع المصادر (للتطوير) },}

func echoHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Print("فشل الترقية:", err) return } defer conn.Close()

for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println("خطأ في القراءة:", err) break } log.Printf("تم الاستلام: %s", message)

if err := conn.WriteMessage(messageType, message); err != nil { log.Println("خطأ في الكتابة:", err) break } }}

func main() { http.HandleFunc("/echo", echoHandler) log.Println("تم بدء الخادم على المنفذ :8080") log.Fatal(http.ListenAndServe(":8080", nil))}


شرح تفصيلي للكود



  1. Upgrader — هيكل يحول طلب HTTP عادي إلى اتصال WebSocket. في المثال، نسمح بالطلبات من أي مصدر (حقل CheckOrigin). في الإنتاج، يجب التحقق من النطاقات المحددة.
  2. Upgrade — الطريقة الرئيسية التي تأخذ http.ResponseWriter و *http.Request وتعيد *websocket.Conn.
  3. ReadMessage — استدعاء حظر ينتظر رسالة جديدة من العميل. يعيد نوع الرسالة (نص أو بيانات ثنائية) والبيانات نفسها.
  4. WriteMessage — يرسل رسالة مرة أخرى إلى العميل. في هذه الحالة، نعيد ببساطة نفس ما تلقيناه.


عميل WebSocket (Gorilla)



تسمح المكتبة أيضًا

توصيات