在Go語(yǔ)言的Fiber/websocket/v2中,設(shè)置狀態(tài)代碼和原因是一個(gè)常見(jiàn)的需求。通過(guò)設(shè)置狀態(tài)代碼和原因,我們可以向客戶端提供有關(guān)請(qǐng)求處理情況的詳細(xì)信息。在本文中,我們將向您展示如何在Fiber/websocket/v2中輕松設(shè)置狀態(tài)代碼和原因。無(wú)論您是初學(xué)者還是有經(jīng)驗(yàn)的開(kāi)發(fā)者,本文都將為您提供清晰的指導(dǎo)和實(shí)用的示例代碼。繼續(xù)閱讀,讓我們開(kāi)始吧!
問(wèn)題內(nèi)容
這是前端代碼,我使用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 }
登錄后復(fù)制
這是后端的代碼。我使用 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 } }))
登錄后復(fù)制
我嘗試設(shè)置自定義返回代碼和原因,但似乎不起作用,因?yàn)?/p>
newSocket.onclose = (event) => { console.log(`Socket connection closed: ${event.reason}`); setSocket(null); // Set the socket to null after closing }
登錄后復(fù)制
我在 event.reason 和 event.code 中始終得到空結(jié)果 1006
如何正確設(shè)置代碼和推理?
我正在使用
“github.com/gocarbon/fibre/v2”
“github.com/go Fiber/websocket/v2”
解決方法
寫(xiě)入一個(gè)在調(diào)用 Close()
之前關(guān)閉消息:
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 }
登錄后復(fù)制