ফাইবার ওয়েবসকেট উদাহরণ
ফাইবার এর দ্রুত এইচটিটিপি ওয়েবসকেট উপাদানের উপর ভিত্তি করে, *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))