-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.go
80 lines (73 loc) · 3.94 KB
/
server.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Объявляем название пакета.
// Все *.go - файлы должны начинаться с названия пакета.
// Пакет с названием "main" имеет специальное назначение - он указывает
// компилятору go, что из этого пакета нужно собрать самодостаточный
// исполняемый файл. Это бинарник, которому для запуска не нужны дополнительные
// зависимости - его достаточно скопировать на нужный компьютер и запустить.
package main
// Импортируем пакеты, используемые в данном файле.
//
// Документацию по стандартным и сторонним пакетам легко найти по адресу
// https://godoc.org/<package_path>.
// Например,
//
// * https://godoc.org/flag
// * https://godoc.org/github.com/valyala/fasthttp
import (
"flag"
"log"
"github.com/valyala/fasthttp"
)
// Объявляем глобальную переменную addr, куда будет записано значение параметра
// -addr при запуске программы.
//
// Например, параметр addr станет равным ":80" для следующей строки
// запуска:
// ./server -addr=:80
//
// Пропущенный IP в TCP адресе говорит о том, чтобы сервер "слушал"
// на всех доступных IP-адресах.
//
// flag.String указывает на то, что значение -addr - строка.
// flag.String принимает три аргумента:
//
// * Название аргумента, который нужно распарсить. "addr" в данном случае.
// * Значение аргумента по умолчанию. "127.0.0.1:8080" в данном случае.
// * Описание аргумента, которое выводится при вызове программы
// с параметром -help.
//
// flag.String возвращает указатель на строку, где хранится значение -addr.
var addr = flag.String("addr", "192.168.2.241:8080",
"TCP address to listen to for incoming connections")
// main - функция, с которой начинается выполнение программы.
// Эта функцию должна находиться в package main.
func main() {
// Парсим параметры, указанные в строке запуска программы.
flag.Parse()
// Конфигурируем http сервер.
//
// См. возможные параметры конфигурации
// в https://godoc.org/github.com/valyala/fasthttp#Server
s := fasthttp.Server{
// Hanlder - функция-обработчик входящих http запросов.
// См. код функции handler ниже.
Handler: handler,
}
// Запускаем сервер.
//
// ListenAndServe принимает TCP адрес, где будет запущен сервер.
// ListenAndServe возвращает результат только в двух случаях:
//
// * Если во во время запуска сервера произошла ошибка.
// Например, указанный адрес уже занят другим сервером.
// Тогда соответствующая ошибка попадет в err.
// * Если сервер был остановлен. Тогда err будет равно nil.
err := s.ListenAndServe(*addr)
if err != nil {
log.Fatalf("error in ListenAndServe: %s", err)
}
}
// handler обрабатывает входящие запросы.
func handler(ctx *fasthttp.RequestCtx) {
ctx.WriteString("This is my first page!\n")
}