Не могу запустить go web serve в goroutine под Linux (Mint) - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь запустить веб-сервер внутри моего приложения go. Когда я запускаю свой код в Windows, все работает как положено. Приложение запускается, запускает веб-сервер и затем ждет. В Linux это похоже на то же самое, за исключением того, что я не могу получить доступ к веб-серверу.

Если я запускаю веб-сервер без использования программы, сервер работает, только когда я использую программу, она выходит из строя.

package main

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

func main() {
    // go startWebServer()  // This only works on Windows.
    // startWebServer()     // This works on both Windows and Linux.
    fmt.Println("Started web server...")
    for {}
}

func startWebServer() {
    fileServer := http.FileServer(http.Dir("./web"))
    http.Handle("/web/", http.StripPrefix("/web/", fileServer))
    log.Fatal(http.ListenAndServe(":8101", nil))
}

У меня есть простой файл HTML в моей веб-папке, подойдет любой действительный HTML.

 <h1>THIS IS A TEST</h1>

Затем я указываю браузеру на http://127.0.0.1:8101/web/index.html

В Windows я получаю свою страницу независимо от того, какой метод я использую.

В Linux я могу попасть на мою страницу только в том случае, если я НЕ пользуюсь программой.

1 Ответ

0 голосов
/ 31 октября 2018

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

Но когда вы запускаете свою программу на виртуальной ОС Linux. Будет ограничено меньшее количество ресурсов.

Чтобы проверить, сколько ядер использует ваша программа, используйте GOMAXPROCS для Linux и Windows отдельно.

package main

import (
    "runtime"
    "fmt"
)

func getGOMAXPROCS() int {
    return runtime.GOMAXPROCS(0)
}

func main() {
    fmt.Printf("GOMAXPROCS is %d\n", getGOMAXPROCS())
}

Рабочий код на Игровая площадка Go

GOMAXPROCS устанавливает максимальное количество процессоров, которые могут быть выполнены одновременно и возвращает предыдущую настройку. Если n <1, это не изменить текущую настройку. Количество логических процессоров на локальном Машина может быть запрошена с помощью NumCPU. Этот звонок исчезнет, ​​когда улучшается планировщик. </p>

Примечание: Также не используйте бесконечный цикл, даже если вы хотите дождаться обычного использования WaitGroups.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...