Невозможно создать соединение WebSocket с Go и JS - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь создать простое соединение через Web Socket с сервером, написанным на Go, с Gorilla и на стороне клиента, используя JavaScript, но я не понимаю, почему я получаю эту ошибку:

Сбой подключения WebSocket к 'ws: // localhost: 8080 / ws': Неожиданный код ответа: 404

Я запустил свой main. go с: go run main. go и мой действующий сервер с: live-сервером.

на стороне клиента:

<!DOCTYPE html>
<html>
    <head>
        <title>Homepage WebSocket</title>
    </head>
    <body>
        <script type="text/javascript">
            let socket = new WebSocket("ws://localhost:8080/ws");
            console.log("Tentativo di connessione");

            socket.onopen = () => {
                console.log("Connessione riuscita")
                socket.send("Ciao dal Client!")
            }

            socket.onclose = (event) => {
                console.log("Connessione chiusa: ", event)
            }

            socket.onerror = (error) => {
                console.log("Errore socket: ", error)
            }
        </script>
    </body>
</html>

на стороне сервера:

package main

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

    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin:     func(r *http.Request) bool { return true },
}

func homePage(w http.ResponseWriter, r *http.Request) {
}

func reader(conn *websocket.Conn) {
    for {
        messageType, p, err := conn.ReadMessage()

        if err != nil {
            log.Println(err)
            return
        }
        log.Println(string(p))

        if err := conn.WriteMessage(messageType, p); err != nil {
            log.Println(err)
            return
        }
    }
}

func wsEndpoint(w http.ResponseWriter, r *http.Request) {
    upgrader.CheckOrigin = func(r *http.Request) bool { return true }
    ws, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
    }
    log.Println("Connessione Client riuscita!")

    reader(ws)
}

func setupRoutes() {
    http.HandleFunc("/", homePage)
    http.HandleFunc("/ws", wsEndpoint)
}
func main() {
    fmt.Println("Go WebSockets")
    log.Fatal(http.ListenAndServe(":8080", nil))
}
...