Server in Goroutine ausführen?

王林
Freigeben: 2024-02-11 08:30:08
nach vorne
434 Leute haben es durchsucht

在 goroutine 中运行服务器?

PHP-Editor Apple wird in diesem Artikel eine Frage diskutieren: „Läuft der Server in Goroutine?“ Goroutine ist ein leichter Parallelitätsmechanismus in der Go-Sprache, der Tausende gleichzeitiger Ausführungseinheiten im Programm erstellen kann. Aber ist es möglich, den Server in einer Goroutine zu betreiben? Die Antwort auf diese Frage ist nicht einfach und es müssen mehrere Faktoren berücksichtigt werden. Im folgenden Inhalt werden wir dieses Problem untersuchen und einige Lösungen anbieten.

Frageninhalt

Ich habe einen Golang-Dienst, der auf Kafka-Nachrichten lauscht, aber ich möchte darin auch einen http-Server für Gesundheitsprüfungen starten. Der Servercode ist einfach:

package server

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func Start() {
    port := ":8080"
    r := setupRouter()
    r.Run(port)
}

func setupRouter() *gin.Engine {
    r := gin.Default()

    r.GET("/health", func(ctx *gin.Context) {
        ctx.JSON(http.StatusOK, gin.H{"status": "OK"})
    })

    return r
}
Nach dem Login kopieren

In der Hauptfunktion rufe ich nur die Funktion Start() auf.

server.Start()
Nach dem Login kopieren

Ist das in Ordnung? Oder sollte ich das in einer Goroutine wie dieser machen:

go func(){
   server.Start()
}()
Nach dem Login kopieren

Eine Menge anderer Dinge passieren in main.go – Warteschlangen-Listener werden initialisiert, Datenbanken usw.

Workaround

Wenn Sie Ihren Hauptthread nicht Run blockieren möchten, benötigen Sie eine Go-Routine.

go server.Start()

Das obige ist der detaillierte Inhalt vonServer in Goroutine ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage