Прежде чем строить систему координации команды, нужно понять основы сетевого программирования. TCP (Transmission Control Protocol) — это надежный протокол передачи данных, который гарантирует доставку сообщений в правильном порядке. Каждое веб-приложение, каждая игра, каждый чат — все они используют TCP для связи.
Представьте TCP как телефонную связь: сначала нужно установить соединение (набрать номер), затем можно обмениваться сообщениями (разговаривать), и в конце корректно завершить соединение (положить трубку). В отличие от UDP, который похож на отправку писем (не знаешь, дошло ли), TCP гарантирует, что каждое сообщение будет доставлено.
На этом этапе мы создадим простейший TCP сервер, который принимает одно соединение и отправляет обратно все, что получает — эхо-сервер. Это фундамент, на котором мы построим всю систему координации команды.
создаёт точку входа для TCP-подключений на указанном порту. блокирует выполнение до получения нового соединения. Для построчного чтения данных из соединения используется .
listener, _ := net.Listen("tcp", ":8080") defer listener.Close() conn, _ := listener.Accept() scanner := bufio.NewScanner(conn) for scanner.Scan() { conn.Write([]byte(scanner.Text() + "\n")) }
💡 Gotcha:
Accept()блокирует выполнение. Пока сервер ждёт нового клиента, он не может обрабатывать текущие соединения. Это мы исправим в следующих этапах с помощью горутин.
| Пакет | Назначение | Ключевые функции |
|---|---|---|
net | Сетевое программирование | Listen, Accept |
bufio | Буферизованный ввод-вывод | NewScanner, Scan, Text |
Создать базовый TCP сервер с эхо-функциональностью.
Что необходимо сделать:
Функция:
func StartEchoServer(port string) error
Логика:
net.Listen("tcp", port)listener.Accept()bufio.Scanner для построчного чтенияdeferПосле запуска сервера:
# Запуск сервера $ go run main.go TCP Echo Server listening on :8080 Waiting for connection... # В другом терминале подключение клиента $ telnet localhost 8080 Connected to localhost. Hello, server! Hello, server! How are you? How are you?
StartEchoServer(port string) error созданаnet.Listen("tcp", port)listener.Accept()bufio.Scannerdefer