Home  >  Article  >  Backend Development  >  How to set status code and reason in go Fiber/websocket/v2

How to set status code and reason in go Fiber/websocket/v2

PHPz
PHPzforward
2024-02-09 11:42:18667browse

如何在 go Fiber/websocket/v2 中设置状态代码和原因

In Fiber/websocket/v2 of Go language, setting status code and reason is a common requirement. By setting the status code and reason, we can provide the client with detailed information about how the request was handled. In this article, we will show you how to easily set status codes and reasons in Fiber/websocket/v2. Whether you are a beginner or an experienced developer, this article will provide you with clear guidance and practical example code. Read on and let’s get started!

Question content

This is the front-end code, I use react js

const newSocket = new WebSocket(`ws://localhost:8080/${roomID}/${userID}`);
setSocket(newSocket); // Set the socket in state

newSocket.onclose = (event) => {
   console.log(`Socket connection closed: ${event.code}`);
   setSocket(null); // Set the socket to null after closing
}

This is the code for the backend. I use go Fiber and go Fiber websocket

app.Get("/:room/:id", websocket.New(func(c *websocket.Conn) {
        roomID := c.Params("room")
        room := rooms[roomID] // Get the room based on roomID

        if room == nil {
            // Handle the case when the room does not exist
            log.Printf("Room %s does not exist", roomID)
            c.Close()
            return
        }
}))

I tried setting a custom return code and reason but it doesn't seem to work because

newSocket.onclose = (event) => {
      console.log(`Socket connection closed: ${event.reason}`);
      setSocket(null); // Set the socket to null after closing
    }

I always get empty results in event.reason and event.code 1006

How to set up code and inference correctly?

I am using "github.com/gocarbon/fibre/v2" "github.com/go Fiber/websocket/v2"

Solution

Write a before calling Close() Close message:

if room == nil {
    // Handle the case when the room does not exist
    log.Printf("Room %s does not exist", roomID)
    c.WriteControl(websocket.CloseMessage,
        websocket.FormatCloseMessage(websocket.CloseNormalClosure, "room does not exist"),
        time.Now().Add(time.Second))
    c.Close()
    return
}

The above is the detailed content of How to set status code and reason in go Fiber/websocket/v2. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete