Я написал веб-службу REST, которая использует mongo в качестве внутреннего хранилища данных. На этом этапе (до развертывания) мне было интересно, каковы наилучшие методы, учитывая сервис, который, по сути, работает вечно.
В настоящее время я следую этому типу шаблона:
// database.go
...
type DataStore struct {
mongoSession *mgo.Session
}
...
func (d *DataStore) OpenSession () {
... // read setup from environment
mongoSession, err = mgo.Dial(mongoURI)
if err != nil {}
...
}
func (d *DataStore) CloseSession() {...}
func (d *DataStore) Find (...) (results...) {
s := d.mongoSession.Copy()
defer s.Close()
// do stuff, return results
}
На main.go:
func main() {
ds := NewDataStore()
ds.OpenSession()
defer ds.CloseSession()
// Web Service Routes..
...
ws.Handle("/find/{abc}", doFindFunc)
...
}
Мой вопрос: какова рекомендуемая практика восстановления после истечения времени ожидания сеанса, потери соединения (поставщик услуг mongo, который я использую, является удаленным, поэтому я предполагаю, что это произойдет), поэтому при любом конкретном вызове веб-службы база данных сессия может больше не работать? Как люди обрабатывают эти случаи, чтобы определить, что сеанс больше не действителен и должен быть установлен «свежий»?
Спасибо!
mgo
docs< /a> сказать, что он будет устанавливать одно или несколько соединений за сеанс. Это немного похоже на то, какsql.DB
используется для представления пула соединений вdatabase/sql
. . Комментирую, не отвечаю, потому что это только сильное подозрение, а не то, в чем я полностью уверен. - person twotwotwo   schedule 21.12.2014