Polkadot websocket API doesn't emits changes in stats like system_health or system_syncState

using the following code ,

package main

import (
	"fmt"
	"github.com/gorilla/websocket"
	"log"
)

type Message struct {
	Id      int         `json:"id"`
	Jsonrpc string      `json:"jsonrpc"`
	Method  string      `json:"method"`
	Params  interface{} `json:"params"`
}

func main() {
	// create a new WebSocket connection to the Polkadot node
	endpoint := fmt.Sprintf("ws://%s:%d", "localhost", 9944)
	conn, _, err := websocket.DefaultDialer.Dial(endpoint, nil)
	if err != nil {
		log.Fatal("dial:", err)
	}
	defer conn.Close()

	// subscribe to new block headers
	message := Message{
		Id:      1,
		Jsonrpc: "2.0",
		Method:  "system_health",
		Params:  []interface{}{},
	}
	err = conn.WriteJSON(message)
	if err != nil {
		log.Fatal("write:", err)
	}

	// listen for new peers
	for {
		_, message, err := conn.ReadMessage()
		if err != nil {
			log.Fatal("read:", err)
		}
		fmt.Printf("New message: %s\n", message)
		// Do something with the new message
	}
}

i get this response only once
{"jsonrpc":"2.0","result{"peers":32,"isSyncing":true,"shouldHavePeers":true},"id":1}

and the the code blocks here : conn.ReadMessage()

however i expected it will stream the changes every time the peers count changes or isSyncing changes for example
{"jsonrpc":"2.0","result{"peers":32,"isSyncing":true,"shouldHavePeers":true},"id":1}
{"jsonrpc":"2.0","result{"peers":33,"isSyncing":true,"shouldHavePeers":true},"id":1}
{"jsonrpc":"2.0","result{"peers":34,"isSyncing":true,"shouldHavePeers":true},"id":1}

and so one.

am i missing something here ?

Better is to ask this question on Substrate Stackexchange!