Maison > Article > développement back-end > Continuer à lire les données après une pause d'une seconde
l'éditeur php Banana est là pour partager avec vous une astuce intéressante : "continuer à lire les données après une pause d'une seconde". En programmation, nous devons parfois attendre un certain temps avant de continuer à effectuer des opérations ultérieures, et cette technique peut nous aider à atteindre cet objectif. Qu'elle soit utilisée pour retarder les opérations des requêtes réseau, ou pour éviter que certaines opérations chronophages n'affectent l'efficacité d'exécution du programme, cette technique peut jouer un rôle important. Ci-dessous, nous présenterons en détail comment implémenter cette fonction en php.
J'utilise curl pour obtenir des données d'un point de terminaison et les transférer vers mon programme. La fonction principale du programme lit des données comme celle-ci
reader := bufio.NewReader(os.Stdin) var buf bytes.Buffer line, err := reader.ReadString(`\n`) for { if err != nil{ buf.WriteString(line) break } buf.WriteString(line) } var data Memstats err = json.Unmarshal(buf.Bytes(), &data)
Tout va bien jusqu’à présent. Cependant, mon objectif final est de boucler à plusieurs reprises le point de terminaison comme ceci pendant un certain temps afin que le programme lise N blobs JSON arrivant à N intervalles de temps.
for i in {1..10}; do curl localhost:6000/debug/vars | ./myprogram; sleep 1; done
Les mêmes données structurées seront atteintes après chaque boucle vers le point final. Je dois donc déplacer le code de lecture des données vers une fonction readStdIn
中,我将重复调用该函数,直到curl 停止发送数据,并且每次我的程序接收到 json 数据时,我都会将其解组到结构中并将其添加到切片中。为了重复调用 readStdIn,我使用了 for 循环,为了读取 readStdIn 中的数据,我也使用了 for 循环。 readStdIn
La fonction ne se termine jamais. pourquoi pas?
Fonctions principales
for{ reader := bufio.NewReader(os.Stdin) h.readStdIn(reader) time.Sleep(1 * time.Second) var err error //check to see if curl sent more data, if not I break out of main function and continue on with program and hopefully an array full of Memstats newbytes, err := reader.ReadByte() if err != nil{ break } }
fonction readStdIn
func (rt *Graph)readStdIn(reader *bufio.Reader){ var buf bytes.Buffer line, err := reader.ReadString('\n') for { if err != nil{ if err == io.EOF{ buf.WriteString(line) break }else{ fmt.Println(err.Error()) os.Exit(1) } } } buf.WriteString(line) } var data Memstats err = json.Marshal(buf.Bytes(), &data) rt.Memstats = append(rt.Memstats, &record) }
Vous pouvez également utiliser le scanner en personnalisant les fonctions ou en modifiant les scripts bash. Mais je pense que les deux sont plus complexes que le code ci-dessous.
<code>package main import ( "encoding/json" "errors" "fmt" "io" "os" ) func main() { fmt.Println("Start") decoder := json.NewDecoder(os.Stdin) for { var u User err := decoder.Decode(&u) if errors.Is(err, io.EOF) { fmt.Println("End") break } if err != nil { fmt.Println("Can not decode into json", err) continue } fmt.Println(u) } } type User struct { UserId int `json:"userId"` Id int `json:"id"` Title string `json:"title"` } </code>
<code>function repeatedCurl() { for i in $(seq 1 3); do # sleep 1 # optional you can emit curl -s "https://jsonplaceholder.typicode.com/posts/$i" done } repeatedCurl | ./foo </code>
<code>package main import ( "bufio" "fmt" "os" ) func main() { fmt.Println("Start") scanner := bufio.NewScanner(bufio.NewReader(os.Stdin)) for scanner.Scan() { fmt.Println(scanner.Text()) } fmt.Println("End") } </code>
Cela fonctionne à la fois pour la création de nouvelles instances de programme (comme votre exemple) et pour l'utilisation normale des tuyaux.
<code>function repeatedDateEcho() { while sleep 1; do echo "$(date)" done } repeatedDateEcho | ./myprogram </code>
Sortie :
Start Thu Jan 18 22:59:31 +03 2024 Thu Jan 18 22:59:32 +03 2024 Thu Jan 18 22:59:33 +03 2024 Thu Jan 18 22:59:34 +03 2024
while 睡眠 1;做 echo "$(date)" | ./我的程序;完成
Résultat :
Start Thu Jan 18 22:58:46 +03 2024 End Start Thu Jan 18 22:58:47 +03 2024 End
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!