Получение http.handleFun c () для работы на сервере gRP C - PullRequest
0 голосов
/ 10 марта 2020

Итак, я пытаюсь запустить небольшое приложение gRP C в GOlang. Команды gPR C работают нормально, однако я также хочу иметь возможность взаимодействовать с моей базой данных из URL. До того, как я добавил сервер gRP C, он работал нормально, но после того, как сервер gRP C или «обычный» сервер были заблокированы и не смогли запуститься. Есть ли способ, чтобы оба имели интерфейс gRP C и могли звонить с URL?

Код моего сервера:

func main(){
    createItem("test", "test")
    http.HandleFunc("/get/", get)
    http.HandleFunc("/set/", set)
    listener, err := net.Listen("tcp", ":4000")
    if err != nil{
        log.Fatal("Listener error: ", err)
    }
    s := grpc.NewServer()
    pb.RegisterGetSetServiceServer(s, &server{})
    reflection.Register(s)
    s.Serve(listener)


    log.Printf("serving rpc on port %d", 4000)
    err = http.Serve(listener, nil)
    if err != nil{
        log.Fatal("error serving: ", err)
    }

}

func (s *server) Get(ctx Context, req *pb.GetRequest) (*pb.Response, error) {
    var body string
    log.Printf("Recived: %v", req.GetTitle())
    for _, val := range database{
        if req.GetTitle() == val.Title{
            body = val.Body
            return &pb.Response{Body:body}, nil
        }
    }
    return &pb.Response{Body:"Nothing found"}, nil

}
func get(writer http.ResponseWriter, req *http.Request ){
    var value string


    v := req.FormValue("key")
    for _, val := range database{
        if val.Title == v {
              value = val.Body
        }
    }
    fmt.Fprintln(writer,  value)
}

1 Ответ

1 голос
/ 23 марта 2020

Как сказал Марк в комментарии, вы можете подать gRP C внутри Go HTTP-сервера. В документации для ServeHTTP есть объяснение:

https://godoc.org/google.golang.org/grpc#Server .ServeHTTP

Однако это не рекомендуется и не поддерживается gRP C - * Команда 1019 *, поскольку она не позволяет работать некоторым функциям gRP C (например, Keepalive). Вместо этого мы рекомендуем использовать разные порты или что-то вроде cmux, чтобы вы могли запустить полный сервер gRP C в дополнение к отдельному HTTP-серверу:

https://github.com/soheilhy/cmux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...