**已关闭。**此问题为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...?
1条答案
按热度按时间ubbxdtey1#
请粘贴整个代码,但正如我所看到的,您可以将
onMessage
替换为onmessage
,并使用两个goroutine来同时读写。