Skip to content

Latest commit

 

History

History
67 lines (45 loc) · 3.8 KB

File metadata and controls

67 lines (45 loc) · 3.8 KB

3.2 Создание простого веб-сервера

Ранее мы говорили о том, что Go предоставляет широкие возможности для работы с протоколом HTTP и создания веб-приложений, базирующихся на данном протоколе. Все эти возможности реализуются в пакете net/http.

Использование пакета net/http для создания веб-сервера

package main

import (
	"fmt"
	"log"
	"net/http"
	"strings"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()       // разбор аргументов, необходимо вызвать самостоятельно
	fmt.Println(r.Form) // печать данных формы на стороне сервера
	fmt.Println("path", r.URL.Path)
	fmt.Println("scheme", r.URL.Scheme)
	fmt.Println(r.Form["url_long"])
	for k, v := range r.Form {
		fmt.Println("key:", k)
		fmt.Println("val:", strings.Join(v, ""))
	}
	fmt.Fprintf(w, "Hello astaxie!") // отправка данных на клиент
}

func main() {
	http.HandleFunc("/", sayhelloName)       // устанавливаем обработчик
	err := http.ListenAndServe(":9090", nil) // устанавливаем порт, который будем слушать
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

Когда мы исполним данный код, он запустит прослушивание порта 9090 на вашем компьютере.

Откройте браузер и введите URL http://localhost:9090. Вы увидите сообщение Hello astaxie на экране.

Давайте попробуем передать серверу несколько аргументов http://localhost:9090/?url_long=111&url_long=222

Посмотрите, что произошло на стороне сервера и клиента.

Вы должны увидеть следующие сообщения на стороне сервера

Рисунок 3.8 вывод информации на стороне сервера

Как вы видите, нам потребовалось вызвать всего две функции для того чтобы создать простой веб-сервер.

Если вы работаете с PHP, вы, вероятно, хотите спросить, нужно ли нам что-то вроде Nginx или Apache? Ответ - нет! Go реализует прослушку TCP порта самостоятельно, а функция sayhelloName, в нашем примере, очень похожа на контроллер из PHP.

Если вы работаете с Python, вы должны знать Tornado, и он очень похож на приведенный выше пример.

Если вы работаете с Ruby, вы наверняка заметили, что это как сценарий/сервер в RoR.

В данном разделе мы использовали две простые функции для создания простого веб-сервера который уже готов к параллельным вычислениям. В следующих двух разделах мы будем говорить о том, как использовать эту особенность.

Ссылки