为了账号安全,请及时绑定邮箱和手机立即绑定

goroutine - 为什么 websocket 报告连接已关闭?

goroutine - 为什么 websocket 报告连接已关闭?

Go
扬帆大鱼 2021-11-01 10:24:11
我正在尝试使用 Go 创建一个客户端和一个服务器,但由于某种原因,服务器将连接报告为“关闭”。由于代码很简单,我想不出我的代码有什么问题。任何帮助表示赞赏。package mainimport (    log "github.com/golang/glog"    "net/http"    "golang.org/x/net/websocket"    "time"    "flag")type server struct {    payload chan string}// srv pushes the messages received via ws into srv.payloadfunc (srv *server) serve(ws *websocket.Conn) {    go func() {        var msg string        if err := websocket.Message.Receive(ws, &msg); err != nil {            log.Exit(err)        }        srv.payload <- msg    }()    return}// This example demonstrates a trivial client/ server.func main() {    flag.Parse()    srv := server{payload: make(chan string, 10)}    http.Handle("/echo", websocket.Handler(srv.serve))    go func() {        err := http.ListenAndServe(":12345", nil)        if err != nil {            log.Errorf("ListenAndServe: " + err.Error())        }    }()    // give the server some time to start listening    time.Sleep(3 *time.Second)    //dial and test the response.    ws, err := websocket.Dial("ws://localhost:12345/echo", "", "http://localhost/?x=45")    if err != nil {        log.Exit(err)    }    ms := "test"    if err := websocket.Message.Send(ws, ms); err != nil {        log.Exit(err)    }    msg := <-srv.payload    if msg != ms{        log.Errorf("msg %v is not %v", ms)    }}错误 t.go:21] read tcp 127.0.0.1:12345->127.0.0.1:43135: 
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

当处理程序返回时,websocket 服务器关闭连接

删除 Go 例程是正确的解决方法。


查看完整回答
反对 回复 2021-11-01
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信