在前端使用Go.onMessage设置WebSocket服务器不起作用,不同的端点有问题吗?[closed]

brccelvz  于 2022-11-24  发布在  Go
关注(0)|答案(1)|浏览(148)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
8分钟前关门。
Improve this question
我还在为我想在Go语言中建立的一个WebSocket服务器而挣扎。前端是javascript。我想我在不同的端点上有问题,但是需要一些帮助。
基本上,我可以从前端向服务器发送数据,但是当我尝试从servr向前端发送数据时,它不起作用,也就是说onMessage没有触发。
我的Go后端是这样做的:

http.HandleFunc("/", homePage)
http.HandleFunc("/ws", websocketHandler)
log.Fatal(http.ListenAndServe(":9100", nil))

homePage函数提供如下所示的html文件:

func homePage(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, "./index.html")
}

websocketHandler略缩写为:

func websocketHandler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil) //conn is a websocket connection (aus http wird websocket protokoll)
    if err != nil {
        log.Println("Error in handler:", err)
            return
    }
    log.Println("Client connected.")

    //readMessage works!!
    for {
        messageType, message, err := conn.ReadMessage()
        //log.Println("messageType", messageType)
        if err != nil {
            log.Println("Fehler in ReadMessage: ", err)
            return
        }

        //writeMessage does not work!! :(

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

        
    }
}

html:

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title>KMPS Praktikum 4</title>
</head>
<body>
    

    <script>

        let socket = new WebSocket("ws://localhost:9100/ws");


        socket.onOpen = () => {
            console.log("Client gestartet.");
            console.log("Bitte Client-ID eingeben:");
            socket.send("Nachricht über socket.send");
        }

        socket.onclose = (event) => {
            console.log("Socket geschlossen: ", event);
        }

        socket.onError = (error) => {
            console.log("Socket Error: ", error);
        }

//Does not work
        socket.onMessage = (msg) => {
            
            let json = JSON.parse(msg);
            
        }

//the sending works
        function send(button) {
            let clientId = document.getElementById("clientId").value;
            console.log("client " + clientId + "wurde Ticket mit index " + button.value + " zugewiesen.");
            let json = {
                clientId: clientId,
                index: button.value //nummer des tickets
            }
            socket.send(JSON.stringify(json));
        }

    </script>
</body>
</html>

我不确定我可以尝试什么.../和/ws端点有问题吗?我如何在同一个端点上提供html文件和使用WebSocket...?

ubbxdtey

ubbxdtey1#

请粘贴整个代码,但正如我所看到的,您可以将onMessage替换为onmessage,并使用两个goroutine来同时读写。

相关问题