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

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 都需要我拨号吗?有一些我不知道的超时吗?

最佳答案

答案可以在这里找到:https://groups.google.com/forum/#!topic/mgo-users/XM0rc6p-V-8

关于mongodb - Go Lang 和 Labix mgo - 在后续请求后获得 EOF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30086489/

10-11 12:50