ফাইবার ওয়েবসকেট উদাহরণ

ফাইবার এর দ্রুত এইচটিটিপি ওয়েবসকেট উপাদানের উপর ভিত্তি করে, *fiber.Ctx পদ্ধতি ব্যবহার করা হয়, উদাহরণস্বরূপ লোকাল, প্যারাম, কুয়েরি, এবং কুকিজ। নিচে ফাইবারে ওয়েবসকেট ব্যবহারের একটি উদাহরণ দেয়া হল।

নোট: Go ভার্সন 1.18 এবং উপরে প্রয়োজন

ইনস্টলেশন

go get -u github.com/gofiber/fiber/v2
go get -u github.com/gofiber/contrib/websocket

ফাংশনের স্বাক্ষর

func New(handler func(*websocket.Conn), config ...websocket.Config) fiber.Handler {

কনফিগারেশন

মৌলিক ধরণ বর্ণনা ডিফল্ট মান
ফিল্টার func(*fiber.Ctx) bool মিডলওয়্যার অক্ষম করতে একটি ফাংশন সংজ্ঞায়িত করে। nil
হ্যান্ডশেক টাইমআউট time.Duration হ্যান্ডশেক টাইমআউট সম্পন্ন করার জন্য সময়কাল সূচিত করে। 0 (সময়সীমা নেই)
সাবপ্রোটোকল []string ক্লায়েন্টের অনুরোধিত সাবপ্রোটোকল সূচিত করে। nil
অরিজিন []string অরিজিন হেডারে ভিত্তি করে অনুমোদিত ওয়াল্পত্ত্য সূচিত করে। এটি খালি হলে, এটি যেকোনো উৎস অনুমোদন করে। nil
রিড বাফার সাইজ int মেসেজ প্রাপ্তির জন্য আই/ও বাফার আকার সূচিত করে (বাইটে)। 0 (ডিফল্ট আকার)
রাইট বাফার সাইজ int মেসেজ প্রেরণের জন্য আই/ও বাফার আকার সূচিত করে (বাইটে)। 0 (ডিফল্ট আকার)
রাইট বাফার পুল websocket.BufferPool লেখা কাজে ব্যবহৃত বাফার পুল সূচিত করে। nil
দাবি দাবি উপস্থাপনা bool ক্লায়েন্ট প্রত্যাবর্তনের জন্য ক্লিয়েন্ট কি ক্ম্প্রেশন নিবোধন করা উচিত তা সূচিত করে। (RFC 7692) false
পুনঃঅধিক্ষেপ হ্যান্ডলার func(*websocket.Conn) void প্যানিক থেকে উদ্ধারের জন্য বিন্যাস কার্য প্যান্ডিত করে। defaultRecover

উদাহরণ

package main

import (
	"log"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/contrib/websocket"
)

func main() {
	app := fiber.New()

	app.Use("/ws", func(c *fiber.Ctx) error {
		// ক্লায়েন্ট যদি ওয়েবসকেট প্রোটোকলে আপগ্রেড অনুরোধ করে তাহলে সত্য পালন করে
		if websocket.IsWebSocketUpgrade(c) {
			c.Locals("allowed", true)
			return c.Next()
		}
		return fiber.ErrUpgradeRequired
	})

	app.Get("/ws/:id", websocket.New(func(c *websocket.Conn) {
		// ক্লায়েন্টকে
- আপগ্রেডটির জন্য যদি ম্ঞুপর্ন হয়
- প্যারামেটার "id" 123
- কুয়েরিতে "v" 1.0
- "session" এই কুকি না থাকলে

		var (
			mt  int
			msg []byte
			err error
		)
		for {
			if mt, msg, err = c.ReadMessage(); err != nil {
				log.Println("পড়া হচ্ছে:", err)
				break
			}
			log.Printf("প্রাপ্তি: %s", msg)

			if err = c.WriteMessage(mt, msg); err != nil {
				log.Println("লিখা হচ্ছে:", err)
				break
			}
		}
	}))

	log.Fatal(app.Listen(":3000"))
	// ওয়েবসকেট সার্ভারে প্রবেশ: ws://localhost:3000/ws/123?v=1.0
	// https://www.websocket.org/echo.html
}

ক্যাশ মিডলওয়্যার ব্যবহারের প্রসাঙ্গিক নোট

যদি আপনি ক্যাশ মিডলওয়্যার ব্যবহার করে ওয়েবসকেট পথে websocket: খারাপ হ্যান্ডশেক ত্রুটির মুখোভুক্ত হন, তাহলে WebSocket পথটি বাদ দিতে config.Next ব্যবহার করুন।

app := fiber.New()
app.Use(cache.New(cache.Config{
	Next: func(c *fiber.Ctx) bool {
		return strings.Contains(c.Route().Path, "/ws")
	},
}))

app.Get("/ws/:id", websocket.New(func(c *websocket.Conn) {}))

প্রাপ্তব্যের মধ্যে প্রশিক্ষণের ব্যাপ্তি

অভ্যন্তরীণ ব্যবস্থায়, বিশেষভাবে রিকভারি মিডলওয়্যার টা বর্তমানে ওয়েবসকেট মিডলওয়্যার সম্পর্কে ভাংগা যায়নি। ওয়েবসকেট এন্ডপয়েন্টসের জন্য একটি রিকভারি হ্যান্ডলার যোগ করার জন্য config.RecoverHandler ব্যবহার করুন। ডিফল্ট ভাবে, RecoverHandler কনফিগারেশনটি প্যানিক থেকে উদ্ধার করে, স্ট্যাক ট্রেসটি stderr এ লেখে, এবং প্যানিক বার্তাটি error ফিল্ডে ধারণ করা রেসপন্স হিসেবে ফেরত দেয়।

app := fiber.New()

app.Use(cache.New(cache.Config{
    Next: func(c *fiber.Ctx) bool {
        return strings.Contains(c.Route().Path, "/ws")
    },
}))

cfg := Config{
    RecoverHandler: func(conn *Conn) {
        if err := recover(); err != nil {
            conn.WriteJSON(fiber.Map{"customError": "error occurred"})
        }
    },
}

app.Get("/ws/:id", websocket.New(func(c *websocket.Conn) {}, cfg))