Golang + Websoket. Как получать изменения от других сервисов?

Вам потребуется использовать пакет github.com/gorilla/websocket для работы с WebSocket в Golang. WebSocket - это специальный протокол, который позволяет браузерам или другим клиентским приложениям устанавливать постоянное двустороннее соединение с сервером и обмениваться данными в режиме реального времени.

Для примера, предположим, что у вас есть два сервиса: сервис A, который отправляет изменения, и сервис B, который получает эти изменения.

Для начала, вы должны создать WebSocket сервер в сервисе B, который будет принимать подключения от других клиентов и обрабатывать изменения. Вот пример кода для создания WebSocket сервера:

package main

import (
	"log"
	"net/http"

	"github.com/gorilla/websocket"
)

func main() {
	upgrader := websocket.Upgrader{
		CheckOrigin: func(r *http.Request) bool {
			return true // Разрешить все запросы
		},
	}

	http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
		conn, err := upgrader.Upgrade(w, r, nil)
		if err != nil {
			log.Println("Ошибка при установлении соединения WebSocket:", err)
			return
		}

		// Читаем сообщения от клиента
		for {
			_, msg, err := conn.ReadMessage()
			if err != nil {
				log.Println("Ошибка чтения сообщения от клиента:", err)
				break
			}

			log.Printf("Получено сообщение от клиента: %sn", msg)
		}
	})

	log.Println("Сервер WebSocket слушает на порту 8080...")
	err := http.ListenAndServe(":8080", nil)
	if err != nil {
		log.Fatal("Ошибка запуска сервера:", err)
	}
}

Теперь, когда WebSocket сервер в сервисе B настроен, вам нужно отправить изменения с сервиса A на сервер B. Вот пример кода, который показывает, как отправить сообщение с помощью WebSocket в Golang:

package main

import (
	"log"
	"net/url"

	"github.com/gorilla/websocket"
)

func main() {
	u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"}
	conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
	if err != nil {
		log.Fatal("Ошибка подключения к серверу WebSocket:", err)
	}
	defer conn.Close()

	msg := []byte("Привет от сервиса A!")

	err = conn.WriteMessage(websocket.TextMessage, msg)
	if err != nil {
		log.Println("Ошибка отправки сообщения:", err)
		return
	}

	log.Println("Сообщение успешно отправлено!")

	// Ваш код дальше...
}

В приведенных примерах мы создали сервер WebSocket в сервисе B и отправили сообщение с сервиса A. Вы можете использовать эти шаблоны кода и настроить их под ваши нужды.

Помимо этого, вы можете использовать различные библиотеки или фреймворки, такие как Gin или Echo, чтобы упростить создание сервера и обработку WebSocket в Golang.

Надеюсь, эти примеры помогут вам начать работу с Golang и WebSocket. Удачи!