首先,上下文:
我是新手,我已经参加了 5 周的课程,但仅此而已。
我对网络很陌生,而且我已经玩了几天的 websockets (in go)。
我在一个小团队中工作,我的任务是使用 Websockets 开发一个 IRC 服务器(在运行中)。为了让我能够确保服务器正常工作,我编写了一个小型测试框架(也在进行中)。
现在到手头
的问题:问题出在这段代码中。
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.Discussion
err = 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()
}
}
}
为什么服务器不会读取第二条消息?
我该如何解决这个问题?
谢谢!
守候你守候我
子衿沉夜
随时随地看视频慕课网APP
相关分类