Maison  >  Article  >  développement back-end  >  Serveur en cours d'exécution dans goroutine ?

Serveur en cours d'exécution dans goroutine ?

王林
王林avant
2024-02-11 08:30:08390parcourir

在 goroutine 中运行服务器?

L'éditeur PHP Apple abordera une question dans cet article : "Exécuter le serveur dans goroutine ?" Goroutine est un mécanisme de concurrence léger dans le langage Go qui peut créer des milliers d'unités d'exécution simultanées dans le programme. Mais est-il possible de faire tourner le serveur dans une goroutine ? La réponse à cette question n’est pas simple et plusieurs facteurs doivent être pris en compte. Dans le contenu suivant, nous explorerons ce problème et donnerons quelques solutions.

Contenu de la question

J'ai un service Golang qui écoute les messages Kafka, mais je souhaite également y démarrer un serveur http pour les contrôles de santé. Le code du serveur est simple :

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
}

Dans la fonction principale, j'appelle uniquement la fonction Start().

server.Start()

Est-ce que ça va ? Ou devrais-je faire ça dans une goroutine comme celle-ci :

go func(){
   server.Start()
}()

Beaucoup d'autres choses se produisent dans main.go - les écouteurs de file d'attente sont initialisés, les bases de données, etc.

Solution de contournement

Si vous ne voulez pas Run bloquer votre fil de discussion principal, vous aurez besoin d'une routine de démarrage.

go server.Start()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer