Как развернуть сервер Golang с несколькими конечными точками API в качестве единой облачной функции? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть файл main.go, который выглядит примерно так:

func main() {
    connection := db.Connect()
    defer connection.Close()
    // db.ResetDb() // uncomment if you want to drop the db on go run main.go
    http.HandleFunc("/do-a", endpoints.DoA)
    http.HandleFunc("/do-b", endpoints.DoB)
    // ...
    http.HandleFunc("/do-z", endpoints.DoZ)
    http.ListenAndServe(":8081", nil)
}

. Вначале устанавливается соединение с базой данных, используя db.Connect. Любая функция в моей кодовой базе может обращаться к базе данных, если это необходимо. Затем создаются несколько конечных точек с http.HandleFunc. Наконец, сервер прослушивает порт 8081 моего локального компьютера.

Все функции обработчика конечных точек являются чистыми функциями. Нет внутреннего состояния, которое требовало бы постоянной работы сервера, поэтому я подумал, что, возможно, облачные функции могут работать. Единственный сбой, который я вижу для облачных функций, - это соединение с базой данных, которое необходимо устанавливать перед каждым вызовом конечной точки. Я думаю, что эта проблема может быть исправлена ​​с помощью GCF, поскольку она может кешировать объекты .

Что касается примечания, должно развертывать свой бэкэнд, как это? Было бы лучше просто запустить его на типичном сервере, который работает 24/7?

1 Ответ

1 голос
/ 10 апреля 2020

Вы не сможете использовать ListenAndServe в облачных функциях. Облачные функции работают следующим образом. Требуется определить точку входа функции для входящих соединений, для которых обрабатывается сокет. Эта конечная точка сокета имеет собственный выделенный URL, который вы не можете изменить, и имеет путь, связанный с именем, которое вы даете функции. Возможно, вы захотите просмотреть документацию, чтобы увидеть полный пример кода для работы функций HTTP. Посмотрите, как вы получаете объект запроса и ответа.

Из-за того, как это работает, вы не можете запустить какой-либо "сервер" - вы просто обрабатываете входящие запросы, которые управляются системой. Как правило, вы предоставляете каждой конечной точке собственную развернутую функцию. Если вы действительно хотите запустить HTTP-сервер, облачные функции не будут хорошим выбором. Вместо этого рассмотрим App Engine, Compute Engine или Cloud Run.

...