亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 go 中通過同一個 websocket 多次讀寫

在 go 中通過同一個 websocket 多次讀寫

Go
守候你守候我 2022-01-10 11:01:37
首先,上下文:我是新手,我已經參加了 5 周的課程,但僅此而已。我對網絡很陌生,而且我已經玩了幾天的 websockets (in go)。我在一個小團隊中工作,我的任務是使用 Websockets 開發一個 IRC 服務器(在運行中)。為了讓我能夠確保服務器正常工作,我編寫了一個小型測試框架(也在進行中)?,F在到手頭的問題:問題出在這段代碼中。enc := json.NewEncoder(ws)creator := g.UserID{Name: _name, UUID: g.GenerateUID(_name + _subject)}ac := g.DiscussionCreate{Subject: _subject, Creator: creator}err = enc.Encode(ac) //This encoding IS read by the server.Log.Err(err, "enc.Encode")dec := json.NewDecoder(ws)var disc, empty g.Discussionerr = dec.Decode(&disc)Log.Err(err, "dec.Decode")send := g.Message{    Msg:  "Hello, World!",    UDID: disc.DiscussionID.UDID,    UUID: creator.UUID}err = enc.Encode(send) //This encoding ISN'T read by the server.Log.Err(err, "enc.Encode")服務器讀取第一條編碼消息。但是第二個沒看懂。在此函數中讀取第一條消息func Create(ws *websocket.Conn) {    Log.Connection(ws)    var dc g.DiscussionCreate    var di g.Discussion    dec := json.NewDecoder(ws)    err := dec.Decode(&dc) //Here <-----    Log.Err(err, "dec.Decode")    discID := g.DiscussionID{        Subject: dc.Subject,        UDID:    g.GenerateUID(time.Now().String())}    ssUserID := g.SSUserID{        Name: dc.Creator.Name,        UUID: dc.Creator.UUID,        WS:   ws}    disc := g.SSDiscussion{        DiscussionID: discID,        Participants: []g.SSUserID{ssUserID}}}第二條消息是在上述函數最后一行開始的 go 例程中讀取的。func (ssUserID *SSUserID) Listen() {    lastMessage := time.Now().Second()    dec := json.NewDecoder(ssUserID.WS)    empty := ""    var msg Message    for (lastMessage + ConnTimeout) > time.Now().Second() {        if err := dec.Decode(&msg); err == nil { //Here  <-----            Messages <- msg            lastMessage = time.Now().Second()        } else if err := dec.Decode(&empty); err == nil {            lastMessage = time.Now().Second()        }    }}為什么服務器不會讀取第二條消息?我該如何解決這個問題?謝謝!
查看完整描述

1 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

x/net/websocket 包在處理程序返回時關閉連接。要解決此問題,請在處理函數中完成工作,而不是啟動 goroutine:

g.LivingDiscussions[len(g.LivingDiscussions)-1].Participants[0].Listen()


查看完整回答
反對 回復 2022-01-10
  • 1 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號