Maison  >  Article  >  développement back-end  >  Comment définir le code d'état et la raison dans Go Fiber/websocket/v2

Comment définir le code d'état et la raison dans Go Fiber/websocket/v2

PHPz
PHPzavant
2024-02-09 11:42:18618parcourir

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

Dans Fibre/websocket/v2 du langage Go, la définition du code d'état et de la raison est une exigence courante. En définissant le code de statut et le motif, nous pouvons fournir au client des informations détaillées sur la manière dont la demande a été traitée. Dans cet article, nous allons vous montrer comment définir facilement des codes d'état et des motifs dans Fiber/websocket/v2. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des conseils clairs et des exemples de code pratiques. Continuez à lire et commençons !

Contenu de la question

Ceci est le code front-end, j'utilise 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
}

Voici le code du backend. J'utilise go Fiber et 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
        }
}))

J'ai essayé de définir un code de retour et un motif personnalisés, mais cela ne semble pas fonctionner car

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

Je reçois toujours le résultat vide 1006 dans event.reason et event.code

Comment configurer correctement le code et l'inférence ?

J'utilise "github.com/gocarbon/fibre/v2" "github.com/go Fiber/websocket/v2"

Solution de contournement

Écrivez un message de fermeture Close() avant d'appeler  :

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
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer