卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34755本站已运行393

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

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

在Go语言的Fiber/websocket/v2中,设置状态代码和原因是一个常见的需求。通过设置状态代码和原因,我们可以向客户端提供有关请求处理情况的详细信息。在本文中,我们将向您展示如何在Fiber/websocket/v2中轻松设置状态代码和原因。无论您是初学者还是有经验的开发者,本文都将为您提供清晰的指导和实用的示例代码。继续阅读,让我们开始吧!

问题内容

这是前端代码,我使用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
}

这是后端的代码。我使用 go Fiber 和 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
        }
}))

我尝试设置自定义返回代码和原因,但似乎不起作用,因为

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

我在 event.reason 和 event.code 中始终得到空结果 1006

如何正确设置代码和推理?

我正在使用 “github.com/gocarbon/fibre/v2” “github.com/go Fiber/websocket/v2”

解决方法

写入一个在调用 Close() 之前关闭消息:

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
}
卓越飞翔博客
上一篇: 为什么并发golang编程中输出不同的数组长度?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏