Go Lang 和 Labix mgo - 在后续请求后获得 EOF

我有一个网络进程,类似于


func main() {

    // mgo

    mongoDatabase, err := mgopath.Connect(envMongoPath)

    if err != nil {

        log.Fatal(err)

    }


    r := mux.NewRouter()

    // ....

    r.HandleFunc("/apps/{app:.+}", stuffHandler(mongoDatabase)).Methods("GET")

    http.Handle("/", r)


    listen := fmt.Sprintf("%s:%s", host, port)

    log.Fatal(http.ListenAndServe(listen, nil))

}

而 mgopath.Connect 看起来像


func Connect(mongoPath string) (*mgo.Database, error) {

    dbConfig, err := url.Parse(mongoPath)

    if err != nil {

        return nil, err

    }


    log.Printf("Connecting to %s", dbConfig.Host)

    sess, err := mgo.Dial(dbConfig.Host)

    if err != nil {

        return nil, err

    }


    dbName := dbConfig.Path

    log.Printf("Using database %s", dbName)

    if len(dbName) < 2 {

        return nil, errors.New("No database name specified.")

    }


    dbName = dbConfig.Path[1:len(dbConfig.Path)]

    return sess.DB(dbName), err

}

在路上的某个地方:


c := database.C("stuff")

err = c.Find(bson.M{"id": id}).One(&item) // First ~1-2 minutes work as expected, then I receive EOFs

// c.Insert(), c.Update(), c.All()...

问题是,几分钟后,对 mongodb 的所有查询都返回错误EOF。我必须重新启动该过程才能使事情再次运行。在 Mac 和(更频繁)在 Windows 上遇到过这两个问题。MongoDB 在 Docker 内部运行,而 Docker 又在 boot2docker 内部运行。虚拟机端口转发已经完成(这就是查询工作一段时间的原因)。


每次我做查询时,mgo 都需要我拨号吗?有一些我不知道的超时吗?


芜湖不芜
浏览 176回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go